Reputation: 605
I am using a lamda expression to filter a query.
Basically, I have lines that are composed of segments and these segments are marked as deleted, inserted or null.
What I want returned are segments that have been marked as deleted but whose any sibling IS NOT marked as deleted. As an example,
Line: "Soylent Green is people!" Broken into 2 segments...
Segment 1: "Soylent Green " (marked as deleted)
Segment 2: "is people!" (not marked as deleted)
Should return me Segment 1. But the next example,
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)
Should not return any segments. See code below:
return seg => seg.ModType == Deleted &&
seg.Line.Segments.Any(segs => segs.ID != seg.ID &&
segs.ModType != Deleted);
Thanks and I appreciate any help or suggestion as to why this is not working.
Upvotes: 4
Views: 675
Reputation: 605
Since ModType is nullable, it did not return what I was expecting. The code should be...
return seg => seg.ModType == Deleted &&
seg.Line.Segments.Any(segs => segs.ID != seg.ID &&
(segs.ModType != Deleted || segs.ModType == null));
Thanks to all those who replied and gave comments and suggestions!
Upvotes: 0
Reputation: 9303
I'd think it would be something like:
return s => from segment in s.Line.Segments
where segment.ModType == Deleted
&& segment.Line.Segments.Any(segs => segs.ModType != Deleted)
select segment
Upvotes: 2
Reputation: 243
Instead of Any(), use Where(), which will return you an IEnumerable object. Like Jon says, Any() returns a boolean.
Upvotes: 0