1

これは簡単なことだとわかっていますが、私の心は今、私をだましているのです。プロパティ GroupSortIndex と ItemSortIndex (グループ内) を持つオブジェクトのフラット リストがあり、リストの最初の項目を見つけたい場合、そのための Linq/ラムダは何ですか?

私が考えることができるのは(メタ、リテラルコードではありません...)

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

...しかし、それは何らかの理由で私にはとても間違っているように見えます。

4

3 に答える 3

4

投稿を読む: first と firstordefault の違いを取得するデフォルトの拡張メソッド

FirstOrDefualt() または First() 関数を使用できます

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

FirstOrDefualtデータがない場合は、excetipn の代わりに null を返すため、使用することをお勧めします。

于 2012-10-17T19:21:16.750 に答える
3
var soughtItem = Source
    .OrderBy(ItemSortIndex)
    .ThenBy(GroupSortIndex).First();

ItemSortIndexとが関数ではなくプロパティである場合GroupSortIndexは、次のものが必要です。

var soughtItem = Source
    .OrderBy(i => ItemSortIndex)
    .ThenBy(i => GroupSortIndex).First();
于 2012-10-17T19:20:59.283 に答える
3

使用できますIOrderedEnumerable.ThenBy(注:IOrderedEnumerableから an が返されIEnumerable.OrderByます):

var firstItem = source.OrderBy(s => s.GroupSortIndex)
                      .ThenBy(s => s.ItemSortIndex)
                      .First();

これは、最初にグループで、次にアイテムで注文します。FirstOrDefaultシーケンスを空にすることができる場合に使用する必要があります。それ以外の場合Firstは、例外が発生します。

(ItemSortIndexはグループ内のアイテムのインデックスであるため(前述のように)、最初にグループで注文し、次にアイテムで注文したいと思いました)

于 2012-10-17T19:21:27.007 に答える