【问题标题】:How to group by on result of LINQ group by如何根据 LINQ group by 的结果进行分组
【发布时间】:2019-06-04 20:55:20
【问题描述】:

我正在尝试根据分组依据的结果进行分组。我需要按“a”列分组 来自dapper查询的结果q,然后我需要根据这个分组的结果进一步分组。我该如何执行此操作或如何访问按值分组的每个“键”及其元素?

第一个 groupby 返回我班级的“GroupedEnumerable”。其中有两个元素(因为 a 列只有两个唯一值,但可以更改),然后每个元素都有一个键,然后是 Result。我需要在每个键的结果中按一些值进一步分组。

var result = q.Groupby(x => x.a);

假设模型/类看起来像这样

public class MyClass
{
    public string a { get; set; }
    public string b { get; set; }
    public string c { get; set; }
    public string d { get; set; }
    public string e { get; set; }


}

我从一个小巧的查询中得到一个对象列表。

var v = repository.getResult(id);

现在我按 a 分组。

 var t= v.Groupby(x => x.a);

现在在结果视图中有多个元素,每个元素都包含原始类的一些属性,例如(a、b、c、d 等)我现在需要对 c 进行分组。

我想我只是想知道这个结果会产生什么样的结果集。我不必使用 linq,如果我知道如何获取内部元素,我可以使用良好的旧循环。

【问题讨论】:

  • 请发布整个代码
  • 我添加了更多代码。无法发布原件,因为它是机密的
  • 请在minimal reproducible example 中显示一些示例数据以及您期望的结果。请注意,您不需要发布您的实际代码(实际上您不应该发布,因为它很可能包含许多不相关的细节);足够的示例代码,以便其他人可以重现您遇到的问题。
  • 您是否尝试对关键结果进行条件测试?例如,如果您的结果是 { key1: 1, key2: 5} 您是否尝试运行测试以进一步过滤这些结果?我不确定您要如何分组然后再次分组(只有一个键可以分组),但是您可以使用在组之后放置的另一个 Where 子句过滤结果,如下所示:stackoverflow.com/questions/2078736/… 基本上,您可以在 .Groupby 之后添加额外的 .Where 或 .Select 以根据需要按键或结果计数过滤结果。
  • 我希望你想要像 Nested Group by LINQ 这样的东西。

标签: c# linq


【解决方案1】:

简而言之,

var result = q.Groupby(x => new { x.a, x.c });

var result = q.Groupby(x => x.a).Select(g => g.Groupby(x => x.c));

【讨论】:

  • 这正在创建一个新的匿名对象。没有办法访问原始对象吗?
  • 第二个?
  • 如果你不喜欢匿名类型,你也可以使用Tuple.Create(x.a, x.c)(x.a, x.c)
  • 谢谢。第二个查询正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 2020-08-19
相关资源
最近更新 更多