コレクションに一致するアイテムが1つしかないことがわかっている場合、Linqにこれについて通知する方法はありますか?見つけたら検索を中止するようにしますか?x個のアイテムを見つけた後で、linqクエリを中止しますか?
私はこれらの両方が1つのアイテムを返す前にフルコレクションを検索すると仮定していますか?
var fred = _people.Where((p) => p.Name == "Fred").First();
var bill = _people.Where((p) => p.Name == "Bill").Take(1);
EDIT:人々はFirstOrDefault
、またはSingleOrDefault
に執着ようです。これらは私の質問とは関係がありません。コレクションが空の場合は、単にデフォルト値を指定します。私が述べたように、私のコレクションには一致するアイテムが1つあります。
AakashMのコメントは私にとって最も興味深いものです。私は私の仮定が間違っているように見えるだろうが、私はなぜ興味がある。 たとえば、オブジェクトへのlinqが、私のコード例でWhere()関数を実行しているとき、その戻り値にさらに操作があることをどのように知っていますか?
これは、基礎となるプロバイダによって異なりますが、あなたの前提は間違っています。 – AakashM
FirstOrDefaultを使用します。アイテムが見つかると停止し、コレクション内の残りのアイテムは検索しません。そうでなければアイテムが存在しない場合はnullを返します。複数の項目がある場合に例外をスローしたい場合は、SingleOrDefaultを使用しますが、これは選択範囲全体を検索します。 – ThePower
@AakashM:少し質問を編集しました。あなたはまったくコメントできますか? – GazTheDestroyer