Стандартный метод Zip
позволяет написать что-то вроде (используя C #):
from t in first.Zip(second, (f, s) => new { First = f, Second = s }
select ... t.First ... t.Second;
Я думаю, что это должно быть достаточно читабельным. Ваш вопрос предполагает, что вы хотели бы иметь возможность создать собственное ключевое слово, например, zip
и расширьте выражения запроса C #, используя его. Это невозможно в C # или Visual Basic (но я согласен, что было бы неплохо).
С некоторыми усилиями вы можете переопределить того, что делает стандартная конструкция запроса C #, так что join
будет вести себя как zip
(В этом случае часть запроса equals
не будет необходимо, чтобы у вас было много синтаксического шума). Возможно, вы также можете переопределить то, что from
предложение. Я не пробовал, но я верю, что вы можете получить что-то вроде:
from f in first.Zip()
from s in second.AddToZip()
from t in second.AddToZip()
select ... f ... s ... t ...;
Я написал статью, в которой описывается, как это сделать переопределить для предложения group by
( Используя пользовательский оператор группировки в LINQ ), так что это может дать вам представление о том, как это осуществимо.
(Но, честно говоря, я думаю, что стандартный метод Zip
должен быть в порядке. Переопределение операторов довольно тонкое. Пример group by
может быть более привлекательным, потому что группировка с использованием метода более уродлива, но даже на край ...)