首页 > C# > 在 LINQ 中分组依据如何实现

在 LINQ 中分组依据如何实现

上一篇 下一篇

假设我们有一个这样的类:

class Person { 
    internal int PersonID; 
    internal string car; 
}

我有一个此类的列表:List<Person> persons;

此列表可以有多个具有相同 s 的实例,例如:PersonID

persons[0] = new Person { PersonID = 1, car = "Ferrari" }; 
persons[1] = new Person { PersonID = 1, car = "BMW"     }; 
persons[2] = new Person { PersonID = 2, car = "Audi"    }; 

有没有办法让我分组并获取他拥有的所有汽车的列表?PersonID

例如,预期结果将是

class Result { 
   int PersonID;
   List<string> cars; 
}

所以分组后,我会得到:

results[0].PersonID = 1; 
List<string> cars = results[0].cars; 

result[1].PersonID = 2; 
List<string> cars = result[1].cars;

从我到目前为止所做的:

var results = from p in persons
              group p by p.PersonID into g
              select new { PersonID = g.Key, // this is where I am not sure what to do

有人可以指出我正确的方向吗?

分割线

网友回答:

var results = from p in persons
              group p by p.PersonID into g
              select new { PersonID = g.Key,
                           /**/car = g.Select(g=>g.car).FirstOrDefault()/**/}

分割线

网友回答:

你也可以试试这个:

var results= persons.GroupBy(n => new { n.PersonId, n.car})
                .Select(g => new {
                               g.Key.PersonId,
                               g.Key.car)}).ToList();

分割线

网友回答:

绝对 – 你基本上想要:

var results = from p in persons
              group p.car by p.PersonId into g
              select new { PersonId = g.Key, Cars = g.ToList() };

或作为非查询表达式:

var results = persons.GroupBy(
    p => p.PersonId, 
    p => p.car,
    (key, g) => new { PersonId = key, Cars = g.ToList() });

基本上,该组的内容(当被视为一个)是给定键的投影(在本例中)中存在的任何值的序列。IEnumerable<T>p.car

有关工作原理的更多信息,请参阅我关于该主题的Edulinq帖子。GroupBy

(我在上面重命名为 ,以遵循 .NET 命名约定,这些约定在“大写复合词和常用术语”部分中特别指出了这一点。PersonIDPersonId

或者,您可以使用:Lookup

var carsByPersonId = persons.ToLookup(p => p.PersonId, p => p.car);

然后,您可以非常轻松地为每个人获得汽车:

// This will be an empty sequence for any personId not in the lookup
var carsForPerson = carsByPersonId[personId];

模板简介:该模板名称为【在 LINQ 中分组依据如何实现】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 285次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-19
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 自适应 微信模板 微信公众平台 微信图片 单页式简历模板 微信素材 html5 企业网站 响应式
您可能会喜欢的其他模板