首页 > 数据库 > mysql教程 > 如何使用实体框架从 SQL 查询中获取匿名结果?

如何使用实体框架从 SQL 查询中获取匿名结果?

Mary-Kate Olsen
发布: 2024-12-30 13:34:09
原创
765 人浏览过

How Can I Get Anonymous Results from SQL Queries Using Entity Framework?

从实体框架中的 SQL 查询获取匿名结果

在实体框架中,SqlQuery方法允许您执行原始 SQL 查询并将结果映射到指定类型的对象。然而,它仅限于已知类型。对于匿名结果,您需要更灵活的方法。

使用原始 SQL

要检索匿名结果,您可以使用原始 SQL 和动态类型。这是实现此目的的方法:

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;
            }
        }
    }
}
登录后复制

用法:

要使用此方法,您可以按如下方式调用它:

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板