C # лямбда-выражение не возвращает ожидаемый результат - PullRequest
4 голосов
/ 21 августа 2009

Я использую лямда-выражение для фильтрации запроса.

В основном, у меня есть линии, которые состоят из сегментов, и эти сегменты помечены как удаленные, вставленные или нулевые.

То, что я хочу вернуть, это сегменты, которые были помечены как удаленные, но чьи родные братья НЕ помечены как удаленные. Как пример,

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);

Спасибо, и я ценю любую помощь или предложение относительно того, почему это не работает.

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Я думаю, это будет что-то вроде:

return s =>  from segment in s.Line.Segments 
             where segment.ModType == Deleted 
                && segment.Line.Segments.Any(segs => segs.ModType != Deleted)
             select segment
0 голосов
/ 21 августа 2009

Поскольку ModType обнуляем, он не вернул то, что я ожидал. Код должен быть ...

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

Спасибо всем, кто ответил и дал комментарии и предложения!

0 голосов
/ 21 августа 2009

Вместо Any () используйте Where (), который вернет вам объект IEnumerable. Как говорит Джон, Any () возвращает логическое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...