使用Linq lambdas,如何获得双键排序列表中的第一项?

时间:2012-10-17 19:19:30

标签: c# linq sorting lambda

我知道这很简单,但我现在的想法就是在欺骗我。如果我们有一个包含属性GroupSortIndex和ItemSortIndex(在组内)的对象的平面列表,并且我们想要找到列表中的第一个项目,那么Linq / lambda是什么?

关于我能想到的一切(元,不是文字代码......)

var soughtItem = Source.OrderBy(ItemSortIndex).OrderBy(GroupSortIndex).ToList()[0]

......但出于某种原因,这对我来说太错了。

3 个答案:

答案 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();

如果ItemSortIndexGroupSortIndex是属性而不是函数,那么您需要:

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是组内项目的索引(如上所述))