多くの単純なクエリに分解し、これらのクエリをまとめて戻します。
は、名前で一致する項目の順序を作ることから始めレッツ:
var nameMatches = from item in itemList where item.Name == p.Name select item;
我々は、pのサブ項目に名前の配列に対するそれらの項目を比較する必要があります。そのシーケンスは何ですか? クエリを書く:
var pnames = from subitem in p.SubItems select subitem.Name;
今、あなたは、名前の順序が一致しnameMatchesからすべての要素を見つけたいです。あなたはどのように一連の名前を取得しようとしていますか?さて、私たちはpnamesで、これと同じことを行うことを行う方法を見ました:
var matches = from item in nameMatches
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where pnames.SequenceEqual(subitemNames)
select item;
をそして今、あなたはどの試合があり、知りたいですか?
return matches.Any();
これはそのまま動作するはずです。しかし、あなたが本当にバフになりたい場合、あなたは1つの大きなクエリですべてを書くことができます!
return (
from item in itemList
let pnames =
(from psubitem in p.SubItems select psubitem.Name)
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where item.Name == p.Name
where pnames.SequenceEqual(subitemNames)
select item).Any();
これで完了です。やさしい!ちょっと覚えて、小さなステップに分割し、個々の問題を個別に解決してから、小さな結果からソリューションをまとめてください。
これはC#-teamの誰かが読んでいる間に書かれているのか本当に疑問に思っています。エリック・リッパートはもちろんC#-teamです! – usr