首页 / .NET / 正文

[LINQ].NET/C#应用程序编程开发中如何使用Linq将一个集合转换成值为集合的字典?

2405 发布于: 2018-06-25 读完约需3分钟

问题描述

在.NET/C#应用程序编程开发中,当前有一个集合:

List<MyObject> list;

其中:list集合是从数据库查询得到的数据,现在有需求需要将这个集合按照集合对象的某一个属性进行分组,然后以这个分组属性的值为键,对应的子集合不值组合一个新的数据字典,如:

Dictionary<long,List<MyObject>> dict;

如果直接使用方法list.ToDictionary(x => x.KeyedProperty),得到的结果却是:

Dictionary<long, MyObject>

那么,正确的将这个集合使用Linq转换成值为集合的字典的方法有哪些呢?

方案一

首先使用GroupBy()方法,对集合进行分组,然后使用ToDictionary()方法,如下:

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());

方案二

使用ToLookup()扩展方法,实现代码如下:

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [LINQ].NET/C#应用程序编程开发中使用Linq数据表中基于一个字段去重的查询应该如何实现呢?

下一篇: [SQL]SQL Server数据库使用CTE递归查询树形结构的层级深度实现语句

本文永久链接码友网 » [LINQ].NET/C#应用程序编程开发中如何使用Linq将一个集合转换成值为集合的字典?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册