Можно ли использовать LINQ для запроса элементов, встречающихся в определенной последовательности?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли использовать LINQ для запроса элементов, встречающихся в определенной последовательности?

Сообщение Anonymous »

Не говорящему по-английски, это сложно найти, так как любые поисковые запросы, которые я придумываю, приводят к множеству вопросов, связанных с OrderBy(Descending), а не с тем, что мне нужно.
Представьте, что у меня есть вещь, и эта вещь имеет коллекцию объектов ThingEvent. Теперь я хочу запросить объекты Thing, события которых происходят в определенном порядке.

Код: Выделить всё

var result = things.Where(t =>
t.ThingEvents
.Has( te => te.EventType == 1 )
.FollowedBy( te => te.EventType == 2 )
)
.ToList();
Это простой псевдокод, предназначенный только для иллюстрации. Thing.ThingEvents — это коллекция типа IEnumerable, поэтому Has() и FollowedBy() — это два воображаемых метода LINQ, которые помогают мне сделать следующее:
  • Проверить, что данный предикат является истинным — в этом отношении они аналогичны методу LINQ Where().
  • В случае FollowedBy это происходит ПОСЛЕ предыдущего «совпадения» в последовательности.
Последняя часть меня сбивает с толку: это означает, что нам нужно, чтобы коллекция ThingEvents содержала события ThingEvents в определенном порядке (эта коллекция правильно сортируется по время, когда мы доберемся до этого запроса).
Коллекция, содержащая типы событий [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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»