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

.NET 作者: Rector 21阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

在.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将一个集合转换成值为集合的字典?

发布于: 2018-06-25 09:03:39
分享扩散:

文章评论

获取验证码