Dado:
Uma tabela nomeada TABLE_1
com as seguintes colunas:
ID
ColumnA
ColumnB
ColumnC
Eu tenho consulta SQL, onde TABLE_1
se une em si mesmo duas vezes baseado fora de ColumnA
, ColumnB
, ColumnC
. A consulta pode ser algo como isto:
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:
Eu preciso que essa consulta seja reescrita no LINQ. Eu tentei dar uma facada nele:
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 :(
Como escrevo minha consulta no LINQ? O que estou fazendo de errado?
fonte
join T2 in db.tbl2 on new { T1.firstName, T1.secondName } equals new { T2.colFirst, T2.colSecond }
. Se você alterá-lo para isso, ele será compilado, no entanto,join T2 in db.tbl2 on new { N1 = T1.firstName, N2 = T1.secondName } equals new { N1 = T2.colFirst, N2 = T2.colSecond }
No LINQ2SQL, você raramente precisa ingressar explicitamente ao usar junções internas.
Se você tiver relacionamentos adequados de chave estrangeira no seu banco de dados, obterá automaticamente uma relação no designer do LINQ (caso contrário, poderá criar uma relação manualmente no designer, embora você realmente deva ter relações adequadas no banco de dados)
Então você pode simplesmente acessar as tabelas relacionadas com a "notação de ponto"
irá gerar a consulta
Na minha opinião, isso é muito mais legível e permite que você se concentre em suas condições especiais e não na mecânica real da junção.
Editar
Naturalmente, isso só é aplicável quando você deseja ingressar na linha com nosso modelo de banco de dados. Se você deseja participar "fora do modelo", precisará recorrer a junções manuais, como na resposta de Quintin Robinson
fonte
Title_Authors é procurar duas coisas que se juntam ao mesmo tempo aos resultados do projeto e continuar encadeando
fonte
Você também pode usar:
fonte
Eu gostaria de dar outro exemplo no qual várias (3) junções são usadas.
fonte
Você também pode ingressar se o número de colunas não for o mesmo nas duas tabelas e puder mapear o valor estático para a coluna da tabela
fonte
Na minha opinião, esta é a maneira mais simples de juntar duas tabelas com vários campos:
fonte
Você pode escrever sua consulta assim.
Se você deseja comparar sua coluna com várias colunas.
fonte