1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <br> public static IEnumerable<T> SqlQuery<T>( this DatabaseFacade facade, string sql, params object [] parameters) where T : class , new () { DataTable dt = SqlQuery(facade, sql, parameters); return dt.ToEnumerable<T>(); } public static IEnumerable<T> ToEnumerable<T>( this DataTable dt) where T : class , new () { PropertyInfo[] propertyInfos = typeof (T).GetProperties(); T[] ts = new T[dt.Rows.Count]; int i = 0; foreach (DataRow row in dt.Rows) { T t = new T(); foreach (PropertyInfo p in propertyInfos) { if (dt.Columns.IndexOf(p.Name) != -1 && row[p.Name] != DBNull.Value) p.SetValue(t, row[p.Name], null ); } ts[i] = t; i++; } return ts; } public static DataTable SqlQuery( this DatabaseFacade facade, string sql, params object [] parameters) { DbCommand cmd = CreateCommand(facade, sql, out DbConnection conn, parameters); DbDataReader reader = cmd.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(reader); reader.Close(); conn.Close(); return dt; } private static DbCommand CreateCommand(DatabaseFacade facade, string sql, out DbConnection dbConn, params object [] parameters) { DbConnection conn = facade.GetDbConnection(); dbConn = conn; conn.Open(); DbCommand cmd = conn.CreateCommand(); if (facade.IsSqlServer()) { cmd.CommandText = sql; CombineParams( ref cmd, parameters); } return cmd; } private static void CombineParams( ref DbCommand command, params object [] parameters) { if (parameters != null ) { foreach (SqlParameter parameter in parameters) { if (!parameter.ParameterName.Contains( "@" )) parameter.ParameterName = $ "@{parameter.ParameterName}" ; command.Parameters.Add(parameter); } } } |
使用
1 | this .context.Database.SqlQuery<GetFeedbackLawyer_ReturnModel>( "sql" ).ToList(); |
原文:https://www.cnblogs.com/lonelyxmas/p/12892449.html