首页 >数据库 >mysql教程 >如何从实体框架 SQL 查询中检索匿名类型结果?

如何从实体框架 SQL 查询中检索匿名类型结果?

Barbara Streisand
Barbara Streisand原创
2024-12-30 19:59:09256浏览

How to Retrieve Anonymous Type Results from Entity Framework SQL Queries?

实体框架 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn