2008-12-05 35 views
13

¿Cómo unir internamente varias columnas de las mismas tablas a través de Linq?linq a sql: unir varias columnas de la misma tabla

Por ejemplo: Ya tengo esto ...

join c in db.table2 on table2.ID equals table1.ID 

tengo que añadir esto ...

join d in db.table2 on table2.Country equals table1.Country 

Respuesta

13

Puede colocar su consulta dentro de una cláusula Where en lugar de utilizar el operador de unión.

El operador de unión admite múltiples cláusulas en VB.NET, pero no C#.

Alternativamente, se puede utilizar el estilo ANSI-82 de la sintaxis 'SQL', ej .:

from t1 in table1 
from t2 in table1 
where t1.x == t2.x 
&& t1.y == t2.y 
+1

esta estructura lógica ha quedado obsoleta en sql hace casi 20 años. (http://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92-standard-better-adopted-over-ansi-89) Coincidirlo en linq no es incorrecto, especialmente en consultas minúsculas de esta manera, pero la sintaxis de Pete Haas es estilísticamente preferible – user314321

1

En VB:

dim qry = FROM t1 in table1 _ 
      JOIN t2 in table2 on t2.ID equals t1.ID _ 
      AND t2.Country equals t1.Country 
29

Este es el única forma en que pude hacer que funcione (en C#).

var qry = from t1 in table1 
      join t2 in table2 
      on new {t1.ID,t1.Country} equals new {t2.ID,t2.Country} 
      ... 
+0

¿podría formatear este formato? Lo haría más fácil de leer. – KClough

12

de http://www.onedotnetway.com/linq-to-sql-join-on-multiple-conditions/

Ambas tablas tienen el código postal y CouncilCode como campos comunes. Digamos que queremos recuperar todos los registros de ShoppingMall donde coinciden tanto PostCode como CouncilCode en House. Esto requiere que hagamos una unión usando dos columnas. En LINQ tal unión se puede hacer usando tipos anónimos. Aquí hay un ejemplo.

var query = from s in context.ShoppingMalls 
     join h in context.Houses 
     on 
     new { s.CouncilCode, s.PostCode } 
     equals 
     new { h.CouncilCode, h.PostCode } 
     select s; 
+0

no sé cuánto googleó para encontrar un ejemplo de una unión de múltiples columnas linq usando la sintaxis de la consulta. Gracias. – RMuesi

6
var query = from s in context.ShoppingMalls 
join h in context.Houses 
on 
new {CouncilCode=s.CouncilCode, PostCode=s.PostCode } 
equals 
new {CouncilCode=h.District, PostCode=h.ZipCode } 
select s; 

Esto es aplicable para cualquier tipo de tipo de datos.

Cuestiones relacionadas