从实体框架中的 SQL 查询中提取匿名类型结果
在实体框架中,SqlQuery
要克服此限制并获得匿名类型结果,解决方案在于直接利用原始 SQL。提供的方法 DynamicListFromSql 允许开发人员实现此功能。
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 查询中获取匿名类型结果,方便检索特定列或根据查询结果创建自定义数据结构。
以上是如何使用实体框架从 SQL 查询中提取匿名类型结果?的详细内容。更多信息请关注PHP中文网其他相关文章!