public class MySqlHelper { private YourContext _context; public MySqlHelper(YourContext context) { _context = context; } /// <summary> /// 查詢列表 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <returns></returns> public List<T> QueryForDatable<T>(string sql) { string conn= _context.Database.Connection.ConnectionString; using(var connection= new MySqlConnection(conn)) { MySqlCommand cmd = new MySqlCommand(sql, connection); //須要open才能執行Command connection.Open(); using (MySqlDataReader reader = cmd.ExecuteReader()) { List<T> data = DataReaderMapToList<T>(reader); connection.Close(); return data; } } } /// <summary> /// 查詢數量 /// </summary> /// <param name="sql"></param> /// <returns></returns> public int QueryForCount(string sql) { string conn = _context.Database.Connection.ConnectionString; using (var connection = new MySqlConnection(conn)) { MySqlCommand cmd = new MySqlCommand(sql, connection); connection.Open(); //只取第一行第一個結果 Object result = cmd.ExecuteScalar(); if (result != null) { int count = int.Parse(result.ToString()); connection.Close(); return count; } connection.Close(); return 0; } } public static List<T> DataReaderMapToList<T>(IDataReader dr) { List<T> list = new List<T>(); T obj = default(T); List<string> columnNames = new List<string>(); //查詢DataReader裏面的列名集合 for (var f = 0; f < dr.FieldCount; f++) { columnNames.Add(dr.GetName(f)); } while (dr.Read()) { obj = Activator.CreateInstance<T>(); foreach (PropertyInfo prop in obj.GetType().GetProperties()) { //判斷列名是否存在 var columnName = columnNames.Find(x => x == prop.Name); if (!string.IsNullOrEmpty(columnName)) { prop.SetValue(obj, dr[prop.Name]); } } list.Add(obj); } return list; } }