如何使用 Dapper 对 SQL 输出进行分组

How to group SQL output using Dapper

假设我有这样的输出 table:

Names |   Values
_______________
 A    |   value1
 A    |   value2
 B    |   value3
 B    |   value4
 C    |   value5

我使用dapper 连接数据库。我没有直接使用 sql 命令,而是调用了一个具有多个查询的存储过程,因此我使用 QueryMultipleAsync 来获取结果,但我被困在了这个问题上。为了这个例子,任务returns只有这个。

public async Task<Something> GetData()
{
    using (IDbConnection database = _mssqlDbConnectionFactory.Connect())
    {
        var results = await database.QueryMultipleAsync("spGetSomething");
        ...
        IEnumerable<Something> something = results.Read< > ...

        return something
    }
}

public class Something
{
    public string? Name { get; set; }
    public List<string>? Values { get; set; }
}

此外,我使用 sql 服务器并且此输出的查询有点长,所以我没有在此处包括它,如果我是正确的,则无法将它们组合在一起,因为我需要每一个价值。 我在这里有什么选择?我可以在读取结果时使用某种 linq 对它们进行分组吗?

您可以尝试使用 class 作为 DataModel 从数据库中转您的数据。

public class DataModel
{
    public string? Name { get; set; }
    public string Values { get; set; }
}

然后使用 lambda Groupby

IEnumerable<Something> something = results.Read<DataModel>()
   .GroupBy(x=> x.Name)
  .Select(x=> new Something(){
     Name = x.Key,
     Values = x.Select(y=>y.Values)
  });