Представьте, что у меня есть вещь, и эта вещь имеет коллекцию объектов ThingEvent. Теперь я хочу запросить объекты Thing, события которых происходят в определенном порядке.
Код: Выделить всё
var result = things.Where(t =>
t.ThingEvents
.Has( te => te.EventType == 1 )
.FollowedBy( te => te.EventType == 2 )
)
.ToList();
- Проверить, что данный предикат является истинным — в этом отношении они аналогичны методу LINQ Where().
- В случае FollowedBy это происходит ПОСЛЕ предыдущего «совпадения» в последовательности.
Коллекция, содержащая типы событий [1,2], будет соответствовать. То же самое будет с [1,1,1,1,2,2,2,2] и [1,2,1,2,3,1,2,1,2]. Но [2,1,1,1,1,1] не будет совпадать, потому что ни в коем случае событие типа 2 не происходит после типа события 1.
Возможно ли это делать подобные запросы с учетом встроенных методов LINQ?
Если нет, можно ли вообще создать что-то подобное, расширив сам LINQ? В моем понимании решения этой проблемы возникает ошибка в том, что такой метод, как Where(), возвращает простое логическое значение, указывающее, соответствует ли запрашиваемый элемент заданному предикату или нет, мои воображаемые Has() и FollowedBy() будут делать то же самое, но все же передать «контекст» того, где они находятся в списке, следующим методам. Конечно, могут быть и другие подобные методы (например, PrecededBy()).
Пытаюсь ли я сделать что-то, для чего LINQ здесь не предназначен? Или я все делаю неправильно? Или, возможно, вам не хватает чего-то очень простого?
Спасибо за любую информацию!
Подробнее здесь: https://stackoverflow.com/questions/792 ... n-sequence
Мобильная версия