使用流畅语法的嵌套 GroupBy LINQ

2024-03-30

我正在尝试使用流畅的(即“方法”)语法编写嵌套的 GroupBy LINQ 表达式。

这是我的课程和数据:

class Person
{
    public String ZipCode, Gender, Name;
}

private static List<Person> people = new List<Person>
{
    new Person { ZipCode= "11111", Gender = "M", Name = "Tom" },
    new Person { ZipCode= "11111", Gender = "M", Name = "Bob" },
    new Person { ZipCode= "11111", Gender = "F", Name = "Nancy" },
    new Person { ZipCode= "11111", Gender = "F", Name = "Lisa" },
    new Person { ZipCode= "22222", Gender = "M", Name = "Dan" },
    new Person { ZipCode= "33333", Gender = "F", Name = "Mary" },
    new Person { ZipCode= "44444", Gender = "F", Name = "Joan" },
    new Person { ZipCode= "44444", Gender = "F", Name = "Jane" },
    new Person { ZipCode= "44444", Gender = "M", Name = "Bill" }
};

我想要实现的是一个按以下方式分组的对象ZipCode然后通过Gender within ZipCode。就对象类型而言,我正在寻找这个:

IEnumerable<IGrouping<string, IEnumerable<IGrouping<string, Person>>>>

然后,这将允许我访问查询结果,如下所示:

foreach(var byZip in mainQuery) {
   Console.WriteLine(byZip.Key);  // print the ZipCode
   foreach(var byGender in byZip) {
      Console.WriteLine(byGender.Key) // print the Gender
      foreach (Person p in byGender)
         Console.WriteLine(p.Name);
   }
}

再次,我希望使用流畅的符号。


根据下面杰夫的回答,这是查询和访问:

IEnumerable<IGrouping<string, IEnumerable<IGrouping<string, Person>>>> query = 
    people
        .GroupBy(p => p.ZipCode)
            .GroupBy(
                keySelector: g => g.Key,
                elementSelector: g => g.GroupBy(p => p.Gender)
            );


foreach (IGrouping<string, IEnumerable<IGrouping<string, Person>>> byZip in query)
{
    Console.WriteLine(byZip.Key);  // print the ZipCode
    foreach (IEnumerable<IGrouping<string, Person>> byGender in byZip)
    {
        foreach (IGrouping<string, Person> t in byGender)
        { 
            Console.WriteLine(t.Key); // print the Gender
            foreach (Person y in t)
                Console.WriteLine(y.Name);
        }

    }
}

在查询语法中,你可以这样写:

var query =
    from p in people
    group p by p.ZipCode into g
    let gender =
        from p in g
        group p by p.Gender
    group gender by g.Key;

并使用“流利”语法将其转换为:

var query2 = people.GroupBy(p => p.ZipCode)
    .GroupBy(
        g => g.Key,
        g => g.GroupBy(p => p.Gender)
    );

然而,您想要访问它的方式与实际类型不匹配。您的访问模式使您的类型实际上是:

IEnumerable<IGrouping<string, IGrouping<string, Person>>>

所以查询应该是:

var query =
    from p in people
    group p by p.ZipCode into g
    let gender =
        from p in g
        group p by p.Gender
    from g2 in gender
    group g2 by g.Key;

而且转换...有点复杂。

var query2 = people.GroupBy(p => p.ZipCode)
    .SelectMany(g =>
        g.GroupBy(p => p.Gender).GroupBy(g2 => g.Key)
    );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用流畅语法的嵌套 GroupBy LINQ 的相关文章

  • 如何在 Entity Framework Core 中按周分组?

    在实体框架 6 中我可以使用SqlFunctions DatePart http msdn microsoft com en us library dd487171 aspx method var byWeek data GroupBy x
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 如何按 pandas 中的值对系列进行分组?

    我现在有一只熊猫Series与数据类型Timestamp 我想按日期对其进行分组 并且每组中有许多行具有不同的时间 看似显而易见的方法类似于 grouped s groupby lambda x x date 然而 熊猫的groupby按索
  • “Equals”和“SequenceEqual”之间的区别?

    是否存在以下情况 Equals MyList1 MyList2 MyList1 SequenceEqual MyList2 两者之间有什么区别 Equals obj1 obj2 and obj1 Equals obj2 Thanks Equ
  • 包含的 CosmosDB Linq 查询不是 IDocumentQuery 类型

    我有一个使用 CosmosDB 的项目 起初我使用了 EFCore 的预览版 但它确实不够成熟 所以我决定选择宇航员 https github com Elfocrash Cosmonaut反而 我有一个 linq 语句 它基本上查看两个属
  • Pandas:GroupBy 到 DataFrame

    参考这个关于 groupby 到 dataframe 的非常流行的问题 https stackoverflow com questions 10373660 converting a pandas groupby object to dat
  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1
  • Resharper:IEnumerable 的可能多重枚举

    我正在使用新的 Resharper 版本 6 在我的代码中的几个地方 它给一些文本加了下划线 并警告我可能存在IEnumerable 可能的多重枚举 我理解这意味着什么 并在适当的情况下采纳了建议 但在某些情况下 我不确定这实际上是一个大问
  • 使用 Group By LINQ 语句时 VB.NET 返回 IEnumerable(Of IEnumerable(Of T))

    我正在尝试转换安西姆 凯拉德INotifyDataErrorInfo执行 http burnaftercoding com post asynchronous validation with wpf 4 5 进入VB NET 一切顺利 直到
  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • Python 列表理解不适用于 itertools.groupby 解码

    我正在尝试解码结果itertools groupby到一个值列表中 我的来源是 x 1 2 2 1 6 3 6 5 1 3 最初的方法是使用 for 语句来实现 如下所示 keyfunc itemgetter 0 groups unique
  • 同一个表的多个外键

    我有一个参考表 其中包含性别 地址类型 联系人类型等各种受控值查找数据 许多表都有指向该参考表的多个外键 我还有多对多关联表 其中同一个表有两个外键 不幸的是 当这些表被拉入 Linq 模型并生成 DBML 时 SQLMetal 不会查看外
  • C#编译器在翻译LINQ表达式时如何选择SelectMany?

    Enumerable SelectMany 有 4 个重载签名 为了简单起见 我们忽略两个签名int争论 所以我们有 2 个 SelectMany 签名 public static IEnumerable
  • 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

    我定义了一个接口 ISerializeDeserialize 和一些继承通用接口的类 我还有一些使用 CodeDomProvider 生成代码的程序集 它生成从同一接口继承的类 但使用特定类型实现它 我想要实现的是获取通用实现和实现特定类型
  • 使用表达式树构造 LINQ GroupBy 查询

    我已经在这个问题上坚持了一个星期了 但没有找到解决方案 我有一个像下面这样的 POCO public class Journal public int Id get set public string AuthorName get set
  • Linq-to-Entity Join 与 GroupJoin

    有人可以解释一下什么是GroupJoin is 和普通的有什么不同Join 常用吗 它仅适用于方法语法吗 查询语法怎么样 如果有 C 代码示例就更好了 行为 假设您有两个列表 Id Value 1 A 2 B 3 C Id ChildVal
  • 分组依据检索 3 个值

    我有以下查询 SELECT Cod MIN Id AS id Min MAX Id AS id Max retrieve value in the middle COUNT AS Tot FROM Table a NOLOCK GROUP
  • 按日/月分组,并取 mongo 中当天/月评分的平均值

    我在 mongodb 中有这些数据 rating 4 ceatedAt ISODate 2016 08 08T15 32 41 262 0000 rating 3 createdAt ISODate 2016 08 08T15 32 41

随机推荐

  • Java中System.load()和System.loadLibrary的区别

    有什么区别System load http download oracle com javase 6 docs api java lang System html load 28java lang String 29 and System
  • 谷歌地图套件,像谷歌地图ios一样绘制步行折线

    I wants to draw polyline for walk like google map app in ios using google maps ios sdk For more clear understanding i am
  • CSS 对浮动对象设置 width:100% 停止

    尝试这个 div p LEFT p div div p RIGHT p div div p p div
  • Android中如何通过JNI调用C文件中的main函数?

    我正在开发一个应用程序 我必须使用Live555在 Android 4 4 2 上 Live555是一个 C 源代码Media Streaming 我必须这样称呼它JNI 我已经构建了 soLive555就像下面的图片 我想通过JNI调用C
  • 0x55a49d6cd0 (RippleDrawable) 上句柄为 0x55a46650d0 的 endAllStagingAnimators 的含义是什么

    在android中 当我运行我的应用程序时 我在logcat中得到了这个 我的应用程序是回合制游戏 例如井字游戏 每次点击更新网格板时都会有 2 个动画 1 个 YTransition 和其他旋转 没有问题 但是当我第一次运行应用程序时 会
  • Git Diff 与 Beyond Compare

    我已经成功地让 git 启动 Beyond Compare 3 作为 diff 工具 但是 当我进行 diff 时 我正在比较的文件没有被加载 仅加载该文件的最新版本 没有加载其他任何内容 因此 Beyond Compare 的右侧窗格中没
  • 元素类型无效:需要字符串(对于内置组件)或类/函数

    import React from react import ReactDOM from react dom import Map from components map container map import App from App
  • Bitmap处理时如何避免“内存不足异常”?

    In onPictureTaken 我想做以下事情 Bitmap decodedPicture BitmapFactory decodeByteArray data 0 data length Matrix matrix new Matri
  • .Net核心和插件

    本次讲座结束后 https learn microsoft com en us dotnet core tutorials creating app with plugin support https learn microsoft com
  • Spring Boot中无法拦截和操作HttpServletResponse

    我有一个要求Base64解码我的 Spring Boot 服务收到的每个 JSON 请求负载 JSON 有效负载将是Base64在使用 HTTP 发布之前在客户端进行编码POST方法 此外 我还需要Base64在呈现给调用客户端应用程序之前
  • 结构体接口

    当你定义一个新的struct最好也定义该类型的接口 即 setter 和 getter 函数 或直接通过 and gt 运营商 EDIT纯 C 编程 这取决于您的结构是否是抽象数据类型 如果您在标头中公开结构定义 则定义访问器没有任何意义
  • 如何使用简单注入器将依赖项注入到 WCF 属性中

    我有一堆与 REST 和 SOAP 配合使用的 WCF 服务 我创建了一个 WCF 属性 用于检查当前 httpcontext 是否存在 如果存在 则使用 cookie 身份验证 否则使用自定义 WCF 身份验证 我的属性如下所示 Publ
  • Android 颜色通知图标

    我正在开发一个为用户创建通知的应用程序 我希望图标在状态栏中显示为白色 但在下拉通知菜单中显示时显示为蓝色 以下是 Google Store 应用执行相同操作的示例 状态栏中的白色通知 下拉菜单中的彩色通知 我怎样才能复制这个 我必须设置哪
  • pjax :HTML 链接,其工作方式类似于浏览器后退按钮

    我使用 pjax 进行网站导航 我需要创建一个 HTML 后退按钮 其工作方式与浏览器后退按钮完全相同 但这应该是一个简单的 HTML 链接 如何创建导航到上一页的 pjax 链接 我搜索过 所有主题似乎都与浏览器后退按钮有关 这不是我想要
  • Apache Web 服务器在 60 秒后超时

    我在 IBM Softlayer 中运行的 apache Web 服务器 php 在 60 秒后遇到超时 这些是我的设置 这些设置后httpd服务器重新启动 httpd conf TimeOut 300 Timeout 300 同时尝试两者
  • 颤振行和列

    我是一个颤振初学者 如何创建无边框的 4 2 表格列之类的元素 我尝试过 但没有得到我想要的对齐方式 像这样 https i stack imgur com i1a3f jpg 有人可以指导我如何解决这个问题吗 这是我的有状态小部件的构建方
  • 如何改进 clisp 错误消息?

    我已经接触过一些clisp 有点令人困惑的是它没有打印出错误所在的行号 或者 至少给出错误所在的一般提示 在某些情况下这一定是可能的 对吧 有什么方法可以获得更好的错误消息吗 正如我看到的大多数涉及 clisp 的问题一样 答案可能是 不要
  • 请对我的示例 Python 程序进行代码审查 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我仍在学习
  • 在 javascript 排序调用之前强制更新 element.innerHTML

    这种情况的最佳实践是什么 1 用户点击 对巨大的javascript数组进行排序 2 浏览器通过element innerHTML Sorting 显示 Sorting 3 浏览器对巨大的 javascript 数组进行排序 100 CPU
  • 使用流畅语法的嵌套 GroupBy LINQ

    我正在尝试使用流畅的 即 方法 语法编写嵌套的 GroupBy LINQ 表达式 这是我的课程和数据 class Person public String ZipCode Gender Name private static List