c# - 如何使用 LINQ 中的 Dynamic 处理 Dapper 返回键值对

标签 c# linq dapper dapper-extensions

我是 Dapper 的新手。让我解释一下我想要达到的目标。我有一个简单的查询,它从数据库返回列,我不想为其创建 Entity(Property) 类来填充数据。我想为此使用动态类型。下面是我的代码:

public dynamic GetABC(int year)
    {

        using (var db = new MySql.Data.MySqlClient.MySqlConnection(ClsConnectionString.connectionString))
        {

            string query = string.Format(@"SELECT * FROM ranking where YEAR(eventdate)='{0}') ORDER BY eventdate DESC, eventid ASC",year);
            //return db.Query<RankingEntity>(query, commandType: System.Data.CommandType.Text).AsList();
            var a = (IEnumerable<dynamic>)db.Query(query, null, null, true, null, CommandType.Text).ToList();
            return a;
       }
    }

它返回键值对。如下所示: Dapper Row

有什么办法吗,我只是写了一个常用的方法来获取列表作为“Property”=“Value”,就像我们在使用任何实体类时通常得到的那样。

我不确定它是否可以实现,但我希望了解它是否可能并希望在我们的应用程序中实现。

我可以通过我不想要的 dapperrows 实现循环来实现这一点。因为如果有 10000 行循环将迭代 10000 次。

提前致谢。

最佳答案

正如我所提到的 DapperRow是Dapper的内部类,可以直接typecast为IDictionary<string,object> , 因为它实现了 IDictionary界面。您所要做的就是:

var a = db.Query(query, null, null, true, null, CommandType.Text).Select(x => x as IDictionary<string,object>);

现在结果将是 IEnumerable<IDictionary<string,object>> 类型,可用于提取所有必需的信息,因为列名是键,相应的行值是 IEnumerable 中每个元素的值。 .

也检查一下,这可能也有效,但我不确定:

 var a = (IEnumerable<IDictionary<string,object>>)db.Query(query, null, null, true, null, CommandType.Text);

关于c# - 如何使用 LINQ 中的 Dynamic 处理 Dapper 返回键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43177328/

相关文章:

c# - 我如何使用正则表达式返回一个字符串以从要匹配的字符串中排除一部分

Linq to DataSet,嵌套分组依据?

c# - 访问 Linq 查询的基本列表

c# - 使用构造函数从 dapper 获取非原始类型的对象

c# - 防止 ListView 在添加项目时调整窗口大小 WPF/C#

c# - 使用 ASP.NET MVC 分页在网页上显示日志文件信息

c# - 在 Azure 中存储媒体、视频和图像的推荐方法是什么

c# - 验证十进制值列表(或该列表的子列表)是否可以等于某个总和

c# - 我需要参数化基本查询吗

sql - 使用 Dapper 将子列表插入 SQL