2009-08-21 13 views
4

私はラムダ式を使用してクエリをフィルタリングしています。C#ラムダ式が期待した結果を返さない

基本的には、セグメントで構成される行があり、これらのセグメントは削除済み、挿入済み、またはnullとしてマークされています。

返されたいセグメントは、削除済みとしてマークされていますが、兄弟は削除済みとしてマークされていません。例として、

Line: "Soylent Green is people!" Broken into 2 segments... 
Segment 1: "Soylent Green " (marked as deleted) 
Segment 2: "is people!" (not marked as deleted) 

は私にセグメント1しかし、次の例を返す必要があり、

Line: "Open the pod bay doors Hal!" Broken into 3 segments... 
Segment 1: "Open the " (marked as deleted) 
Segment 2: "pod bay " (marked as deleted) 
Segment 3: "doors Hal!" (marked as deleted) 

は、任意のセグメントを返すべきではありません。以下のコードを参照してください:

return seg => seg.ModType == Deleted && 
       seg.Line.Segments.Any(segs => segs.ID != seg.ID && 
       segs.ModType != Deleted); 

おかげで、私はなぜこれが動作していないと、任意のヘルプや提案を感謝しています。

+2

本当に教えてくれていますか?ここで「ID」は何ですか?この問題を実証するために、短いが完全な*プログラムを提供してください。私たちはそれを再現できるとすぐに問題を簡単に見つけ出すだろうと私は思っています。私は、「seg」と「segs」が混乱のレシピであることを示唆しています。 –

+0

Line.Segmentsコレクションが正しいことは確かですか? – womp

+0

問題を再現するためにコンパイルして実行できる完全で短いプログラムを投稿してください。これは、希望の結果を得るためにデバッグや調整ができるコードを私たちに与えることによって、私たちを助けるのに役立ちます。 –

答えて

0

ModTypeはnullableなので、私が期待していたものが返されませんでした。コードは答えたとのコメントや提案を与えたすべての人に...

return seg => seg.ModType == Deleted && 
      seg.Line.Segments.Any(segs => segs.ID != seg.ID && 
      (segs.ModType != Deleted || segs.ModType == null)); 

感謝する必要があります!

2

私はそれはようなものになるだろうと思うだろう:)(代わりに、いずれかの

return s => from segment in s.Line.Segments 
      where segment.ModType == Deleted 
       && segment.Line.Segments.Any(segs => segs.ModType != Deleted) 
      select segment 
+1

'Any'はコレクションではなく' bool'を返します。 –

+0

更新しました。ありがとうございました。 –

+0

これは、クエリで使用されるラムダ式を返します。 – Jaime

0

、あなたのIEnumerableオブジェクトを返します。これは、どこで()を使用します。 Jonと同様、Any()はブール値を返します。

関連する問題