LINQクエリ言語でWhereを使用してインデックス/位置を使用する方法[重複] 質問する

LINQクエリ言語でWhereを使用してインデックス/位置を使用する方法[重複] 質問する

メソッド チェーンではなくクエリ言語を使用してこれを記述する可能性はありますか?

 notifications.Where((n, index) => n.EventId == m_lastSelectedEventID)
              .Select((n, index) => new {Position = index}).FirstOrDefault();

ありがとう、ラドゥ

ベストアンサー1

いいえ、残念ながらクエリ式の構文ではこれらのオーバーロードはサポートされていません。

一方、Selectオーバーロードを明示的に使用すると一度最初に、インデックスと値を含む匿名型を作成すると、そのペアのシーケンスをクエリ式内で使用できます。例:

var query = from pair in sequence.Select((value, index) => new { value, index })
            where pair.index % 3 == 0
            select string.Format("{0}: {1}", pair.index, pair.value);

編集:サンプルコードでは、常に最初にフィルタリングしてから、最初のエントリのインデックスを取得していることに注意してください。結果シーケンス。インデックスは常に0です。オリジナル内の選択された ID のインデックスnotifications、おそらくあなたが本当に望んでいるのは:

int? index = notifications.Select((n, index) => new { n, index })
                          .Where(pair => pair.n.EventId == m_lastSelectedEventID)
                          .Select(pair => (int?) pair.index)
                          .FirstOrDefault();

Nullable<int>(見つからない場合はを返しますnull。)

おすすめ記事