Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq lambdas,如何获取双键排序列表中的第一项?_C#_Linq_Sorting_Lambda - Fatal编程技术网

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

C# 使用Linq lambdas,如何获取双键排序列表中的第一项?,c#,linq,sorting,lambda,C#,Linq,Sorting,Lambda,我知道这很简单,但我的大脑正在捉弄我。如果我们有一个属性为GroupSortIndex和ItemSortIndex(在组内)的对象的平面列表,并且我们想要找到列表中的第一个项目,那么Linq/lambda是什么 我能想到的就是(元代码,而不是文字代码…) …但出于某种原因,我觉得这是错的 var soughtItem = Source .OrderBy(ItemSortIndex) .ThenBy(GroupSortIndex).First(); 如果ItemSortIndex

我知道这很简单,但我的大脑正在捉弄我。如果我们有一个属性为GroupSortIndex和ItemSortIndex(在组内)的对象的平面列表,并且我们想要找到列表中的第一个项目,那么Linq/lambda是什么

我能想到的就是(元代码,而不是文字代码…)

…但出于某种原因,我觉得这是错的

var soughtItem = Source
    .OrderBy(ItemSortIndex)
    .ThenBy(GroupSortIndex).First();
如果
ItemSortIndex
GroupSortIndex
是属性而不是函数,则需要:

var soughtItem = Source
    .OrderBy(i => ItemSortIndex)
    .ThenBy(i => GroupSortIndex).First();
如果
ItemSortIndex
GroupSortIndex
是属性而不是函数,则需要:

var soughtItem = Source
    .OrderBy(i => ItemSortIndex)
    .ThenBy(i => GroupSortIndex).First();
阅读帖子:获取first和firstordefault之间的差异

可以使用FirstOrDefualt()或First()函数

var soughtItem = Source.OrderBy(ItemSortIndex).
                   ThenBy(GroupSortIndex).FirstOrDefualt();
if(soughtItem !=null)//advantage of using firstordefault
{
}
最好使用
firstordefault
,因为如果没有数据,它将返回excetipn的null intead

读取post:以获取first和firstordefault之间的差异

可以使用FirstOrDefualt()或First()函数

var soughtItem = Source.OrderBy(ItemSortIndex).
                   ThenBy(GroupSortIndex).FirstOrDefualt();
if(soughtItem !=null)//advantage of using firstordefault
{
}

最好使用
first或default
,因为如果没有数据,它将返回excetipn的null intead

您可以使用
IOrderedEnumerable。然后使用
(注意:一个
IOrderedEnumerable
是从
IEnumerable.OrderBy
返回的):

该命令首先按组排序,然后按项目排序。如果序列可以为空,则应使用
FirstOrDefault
。否则,
First
将引发异常


(我假设您希望先按组排序,然后再按项目排序,因为ItemSortIndex是组内项目的索引(如上所述))

您可以使用
IORDerenumerable。然后通过
(注意:从
IEnumerable.OrderBy>返回
IORDerenumerable
):

该命令首先按组排序,然后按项目排序。如果序列可以为空,则应使用
FirstOrDefault
。否则,
First
将引发异常


(我假设您希望先按组订购,然后再按项目订购,因为ItemSortIndex是组内项目的索引(如上所述))

您是否改变了主意,是因为您不接受订单而导致订单不正确?不,订单正确。我在验证它之前做了标记,这不是好的S.O.礼节,所以我把它颠倒过来,构建了一个测试应用程序,证明了它,正如我最初认为的,你的答案是三个答案中唯一一个顺序正确的,所以它是你的。(在你注意到之前试图删除它。我猜你太快了!:)事实上,这是一个很好的发现,因为你给我看了这个,我现在知道了
iorderenumerable
,这就是
ThenBy
扩展方法所依赖的。我在查看
IEnumerable
,因此,没有看到它。我还更新了您的答案,以正确显示这是源,而不是您提到的可枚举。再次感谢!啊,好的,但是一个
IOrderedEnumerable
继承自
IEnumerable
。一旦你知道了
,你就永远不会忘记它;
(你可以随时链接它)绝对不会忘记的!再次感谢!已经在我们的生产代码中像冠军一样工作了!你改变主意了吗?是不是因为你不接受订单而导致订单不正确?不是,订单是正确的。我在验证它之前做了标记,这不是好的S.O.礼节,所以我把它颠倒过来,构建了一个测试应用程序,证明了它,正如我最初认为的,你的答案是三个答案中唯一一个顺序正确的,所以它是你的。(在你注意到之前试图删除它。我猜你太快了!:)事实上,这是一个很好的发现,因为你给我看了这个,我现在知道了
iorderenumerable
,这就是
ThenBy
扩展方法所依赖的。我在查看
IEnumerable
,因此,没有看到它。我还更新了您的答案,以正确显示这是源,而不是您提到的可枚举。再次感谢!啊,好的,但是一个
IOrderedEnumerable
继承自
IEnumerable
。一旦你知道了
,你就永远不会忘记它;
(你可以随时链接它)绝对不会忘记的!再次感谢!已经在我们的生产代码中像冠军一样工作了!回答得很好,但不完全正确。您的组和项目排序是反向的。我把它们倒过来了,但那是因为我做了两次排序,并且(错误地)希望它能保持顺序。ThenBy认为这样做是不必要的。回答很好,但不完全正确。您的组和项目排序是反向的。我把它们倒过来了,但那是因为我做了两次排序,并且(错误地)希望它能保持顺序。ThenBy使这样做变得不必要。我用Pranay的回答喊出了同样的问题。正确的概念,但错误的顺序,所以我必须给蒂姆答案。同样的问题我用普拉内的答案喊出来。概念正确,但顺序错误,所以我不得不给蒂姆答案。