实体框架 SQL 查询的匿名类型结果
实体框架允许执行原始 SQL 查询,但在尝试检索时会出现常见的挑战匿名结果。本机 SqlQuery
为了克服这个问题,需要使用底层连接对象的自定义方法。以下 C# 代码提供了一个解决方案:
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 查询字符串以及参数字典。它使用底层连接创建并执行命令,读取结果,并使用列名称和值动态填充 ExpandoObject。
要使用此方法,只需像这样调用它:
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中文网其他相关文章!