Investigamos por distintos espacios y así de esta forma traerte la solución para tu dilema, si continúas con alguna inquietud puedes dejarnos tu inquietud y te contestamos con mucho gusto, porque estamos para servirte.
Solución:
var result = from x in entity
join y in entity2 on new x.field1, x.field2 equals new y.field1, y.field2
La solución con el tipo anónimo debería funcionar bien. LINQ lata solo represente equijoins (con cláusulas de unión, de todos modos), y de hecho eso es lo que ha dicho que desea expresar de todos modos en función de su consulta original.
Si no le gusta la versión con el tipo anónimo por alguna razón específica, debe explicar esa razón.
Si desea hacer algo diferente a lo que solicitó originalmente, dé un ejemplo de lo que De Verdad quiero hacer.
EDITAR: Respondiendo a la edición en la pregunta: sí, para hacer una unión de “rango de fechas”, debe usar una cláusula where en su lugar. En realidad, son semánticamente equivalentes, por lo que es solo una cuestión de optimizaciones disponibles. Las combinaciones de igualdad brindan una optimización simple (en LINQ to Objects, que incluye LINQ to DataSets) mediante la creación de una búsqueda basada en la secuencia interna; considérelo como una tabla hash de key a una secuencia de entradas que coincidan key.
Hacer eso con rangos de fechas es algo más difícil. Sin embargo, dependiendo exactamente de lo que quiera decir con “unión de rango de fechas”, es posible que pueda hacer algo similar – si planea crear “bandas” de fechas (por ejemplo, una por año) de modo que dos entradas que ocurran en el mismo año (pero no en la misma fecha) coincidan, entonces puede hacerlo simplemente usando esa banda como el key. Si es más complicado, por ejemplo, un lado de la combinación proporciona un rango, y el otro lado de la combinación proporciona una sola fecha, coincidiendo si cae dentro de ese rango, eso se manejaría mejor con un where
cláusula (después de un segundo from
cláusula) OMI. Podrías hacer una magia particularmente funky ordenando a un lado o al otro para encontrar coincidencias de manera más eficiente, pero eso sería mucho trabajo; solo haría ese tipo de cosas después de verificar si el rendimiento es un problema.
var result = from x in entity1
join y in entity2
on new X1= x.field1, X2= x.field2 equals new X1=y.field1, X2= y.field2
Debe hacer esto, si los nombres de las columnas son diferentes en dos entidades.
Si haces scroll puedes encontrar las interpretaciones de otros creadores, tú aún tienes la libertad de insertar el tuyo si dominas el tema.