Решение с анонимным типом должно работать нормально. LINQ может представлять только эквиджоины (в любом случае, с предложениями соединения), и, действительно, это то, что, как вы сказали, вы хотите выразить в любом случае на основе вашего исходного запроса.
Если вам не нравится версия с анонимным типом по какой-то конкретной причине, вы должны объяснить эту причину.
Если вы хотите сделать что-то кроме того, о чем вы изначально просили, приведите пример того, что вы действительно хотите сделать.
РЕДАКТИРОВАТЬ: Отвечая на редактирование в вопросе: да, чтобы сделать объединение «диапазон дат», вам нужно вместо этого использовать предложение where. Они на самом деле семантически эквивалентны, так что это просто вопрос доступных оптимизаций. Equijoins обеспечивают простую оптимизацию (в LINQ to Objects, которая включает в себя LINQ to DataSets) путем создания поиска на основе внутренней последовательности - его можно рассматривать как хеш-таблицу от ключа до последовательности записей, соответствующих этому ключу.
Делать это с диапазонами дат несколько сложнее. Однако, в зависимости от того, что именно вы подразумеваете под «объединением диапазона дат», вы можете сделать что-то подобное - если вы планируете создавать «полосы» дат (например, по одной в год), чтобы две записи, которые происходят в одном и том же году (но не в одну и ту же дату), должны совпадать, тогда вы можете сделать это, просто используя эту полосу в качестве ключа. Если это сложнее, например одна сторона объединения обеспечивает диапазон, а другая сторона объединения предоставляет одну дату, соответствующую, если она попадает в этот диапазон, которая будет лучше обрабатываться с предложением where
(после второго предложения from
) IMO , Вы могли бы сделать что-то особенное в стиле фанк, заказав одну или другую сторону для более эффективного поиска совпадений, но это было бы большой работой - я бы сделал такую вещь только после проверки, является ли производительность проблемой.