我知道这很简单,但我现在的想法就是在欺骗我。如果我们有一个包含属性GroupSortIndex和ItemSortIndex(在组内)的对象的平面列表,并且我们想要找到列表中的第一个项目,那么Linq / lambda是什么?
关于我能想到的一切(元,不是文字代码......)
var soughtItem = Source.OrderBy(ItemSortIndex).OrderBy(GroupSortIndex).ToList()[0]
......但出于某种原因,这对我来说太错了。
答案 0 :(得分:4)
阅读帖子:Default Extension methods以区分第一次和第一次失败
您可以使用FirstOrDefualt()或First()函数
var soughtItem = Source.OrderBy(ItemSortIndex).
ThenBy(GroupSortIndex).FirstOrDefualt();
if(soughtItem !=null)//advantage of using firstordefault
{
}
最好使用FirstOrDefualt
,因为如果没有数据,它将返回excetipn的null intead
答案 1 :(得分:3)
var soughtItem = Source
.OrderBy(ItemSortIndex)
.ThenBy(GroupSortIndex).First();
如果ItemSortIndex
和GroupSortIndex
是属性而不是函数,那么您需要:
var soughtItem = Source
.OrderBy(i => ItemSortIndex)
.ThenBy(i => GroupSortIndex).First();
答案 2 :(得分:3)
您可以使用IOrderedEnumerable.ThenBy
(注意:从IOrderedEnumerable
返回IEnumerable.OrderBy
):
var firstItem = source.OrderBy(s => s.GroupSortIndex)
.ThenBy(s => s.ItemSortIndex)
.First();
首先由小组然后按项目排序。如果序列可以为空,则应使用FirstOrDefault
。否则First
会引发异常。
(我假设您要先按组排序,然后再按项目排序,因为ItemSortIndex是组内项目的索引(如上所述))