Dado:
Una tabla nombrada TABLE_1
con las siguientes columnas:
ID
ColumnA
ColumnB
ColumnC
Tengo consulta SQL, donde TABLE_1
se une sobre sí mismo dos veces con sede fuera de ColumnA
, ColumnB
, ColumnC
. La consulta podría verse así:
Select t1.ID, t2.ID, t3.ID
From TABLE_1 t1
Left Join TABLE_1 t2 On
t1.ColumnA = t2.ColumnA
And t1.ColumnB = t2.ColumnB
And t1.ColumnC = t2.ColumnC
Left Join TABLE_1 t3 On
t2.ColumnA = t3.ColumnA
And t2.ColumnB = t3.ColumnB
And t2.ColumnC = t3.ColumnC
... and query continues on etc.
Problema:
Necesito que la consulta se reescriba en LINQ. He intentado darle una puñalada:
var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on t1.ColumnA equals t2.ColumnA
&& t1.ColumnB equals t2.ColumnA
// ... and at this point intellisense is making it very obvious
// I am doing something wrong :(
¿Cómo escribo mi consulta en LINQ? ¿Qué estoy haciendo mal?
fuente
join T2 in db.tbl2 on new { T1.firstName, T1.secondName } equals new { T2.colFirst, T2.colSecond }
. Sin embargo, si lo cambia a esto, se compilarájoin T2 in db.tbl2 on new { N1 = T1.firstName, N2 = T1.secondName } equals new { N1 = T2.colFirst, N2 = T2.colSecond }
En LINQ2SQL rara vez necesita unirse explícitamente cuando usa uniones internas.
Si tiene relaciones de clave externa adecuadas en su base de datos, obtendrá automáticamente una relación en el diseñador LINQ (de lo contrario, puede crear una relación manualmente en el diseñador, aunque realmente debería tener relaciones adecuadas en su base de datos)
Luego puede acceder a tablas relacionadas con la "notación de puntos"
generará la consulta
En mi opinión, esto es mucho más legible y le permite concentrarse en sus condiciones especiales y no en la mecánica real de la unión.
Editar
Esto, por supuesto, solo es aplicable cuando desea unirse a la línea con nuestro modelo de base de datos. Si desea unirse "fuera del modelo" debe recurrir a las uniones manuales como en la respuesta de Quintin Robinson
fuente
Title_Authors es una búsqueda de dos cosas que se unen a la vez en los resultados del proyecto y continúan encadenando
fuente
U también puede usar:
fuente
Me gustaría dar otro ejemplo en el que se usan múltiples (3) combinaciones.
fuente
También puede unirse si el número de columnas no es el mismo en ambas tablas y puede asignar el valor estático a la columna de la tabla
fuente
En mi opinión, esta es la forma más sencilla de unir dos tablas con múltiples campos:
fuente
Puede escribir su consulta de esta manera.
Si desea comparar su columna con varias columnas.
fuente