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

Ram*_*ngh 5 c# linq dapper dapper-extensions

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

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;
       }
    }
Run Code Online (Sandbox Code Playgroud)

它返回我键值对。像下面这样: 衣冠楚楚的行

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

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

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

提前致谢。

Mri*_*boj 6

正如我所提到的,DapperRowDapper 是一个内部类,它可以直接类型转换为IDictionary<string,object>,因为它实现了IDictionary接口。您所要做的就是:

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

现在 result 的类型为IEnumerable<IDictionary<string,object>>,可用于提取所有所需的信息,因为列名是键,相应的行值是IEnumerable.

另请检查,这可能也有效,但我不确定:

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