在实体框架中检索匿名 SQL 查询结果
实体框架提供了 SqlQuery
一种解决方案是使用原始 SqlConnection 和 ExecuteReader 方法来检索数据并根据结果集手动创建匿名对象。这是一个可以使用的自定义扩展方法:
public static IEnumerable<dynamic> DynamicListFromSql(this DbContext db, string Sql, Dictionary<string, object> Params) { using (var cmd = db.Database.Connection.CreateCommand()) { cmd.CommandText = Sql; if (cmd.Connection.State != ConnectionState.Open) { cmd.Connection.Open(); } foreach (KeyValuePair<string, object> p in Params) { DbParameter dbParameter = cmd.CreateParameter(); dbParameter.ParameterName = p.Key; dbParameter.Value = p.Value; cmd.Parameters.Add(dbParameter); } using (var dataReader = cmd.ExecuteReader()) { while (dataReader.Read()) { var row = new ExpandoObject() as IDictionary<string, object>; for (var fieldCount = 0; fieldCount < dataReader.FieldCount; fieldCount++) { row.Add(dataReader.GetName(fieldCount), dataReader[fieldCount]); } yield return row; } } } }
使用此方法,您可以从 SQL 查询中检索匿名结果,如下所示:
List<dynamic> results = DynamicListFromSql(myDb, "select * from table where a=@a and b=@b", new Dictionary<string, object> { { "a", true }, { "b", false } }).ToList();
以上是如何使用实体框架检索匿名 SQL 查询结果?的详细内容。更多信息请关注PHP中文网其他相关文章!