我如何按属性分组,并从任何具有lambda linq的分组中获得第一条记录?

问题描述 投票:0回答:2

我的对象(照片)具有3个属性(ID,名称,照片)

身份证姓名照片***********************1个1.jpg2个2.jpg3 b 3.jpg4 b 4.jpg5 c 5.jpg*************************我如何使用linq lambda获得groupby(name)中的第一条记录?如下表身份证姓名照片**********************1个1.jpg3 b 3.jpg5 c 5.jpg***********************

我使用此代码:

photos.GroupBy(x => x.Name).FirstOrDefault();

但是结果只是(name:a),我需要(ID,Name,Photo)值

c# asp.net-mvc linq asp.net-core lambda
2个回答
1
投票
photos.GroupBy(p => p.Name).Select(p => p.First()).ToList();

0
投票

[当您执行GroupBy()时,结果是一个IGroupings的IEnumerable,它将是IGrouping的,因此当您尝试访问第一个元素时,您不会得到第一张照片,但是第一个IGrouping将在其中包含2个元素示例。

获得第一组第一张照片的正确方法是这样的:

var firstGroup = photos.GroupBy(x => x.Name).OrderBy(y => y.Key).First(); //or FirstOrDefatult() if you prefer
Photo firstPhotoInGroup = firstGroup.First(); 

一旦获得该组,您就可以像使用带有Key属性的IEnumerable一样使用它

© www.soinside.com 2019 - 2024. All rights reserved.