Saltar al contenido

Cómo hacer uniones en LINQ en múltiples campos en una sola unión

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *