Cómo lograr Izquierda Excluir JOIN usando LINQ?¿Cómo lograr Izquierda Excluir JOIN usando LINQ?
En SQL:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
Cómo lograr Izquierda Excluir JOIN usando LINQ?¿Cómo lograr Izquierda Excluir JOIN usando LINQ?
En SQL:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
Usted necesita DefaultIfEmpty()
para la LEFT JOIN
, a continuación, se puede comprobar si el valor sumado es null
:
var result = from a in Table_A
join b in Table_B on a.Key equals b.Key into j
from b in j.DefaultIfEmpty()
where b == null
select new { ... };
Más fácil sería escribir así:
var result = from a in Table_A
where !Table_B.Any(b => b.Key == a.key)
select new { ... };
Una manera aún más rápida
var result = from a in Table_A
where !Table_B.Select(b => b.Key).Contains(a.Key)
select new { ... };
es su instrucción SQL como optimizada como la respuesta de dahlbyk? –
Tendrá un rendimiento aún mejor. Generará 'NOT EXISTS' en código SQL. – Magnus
Estrictamente hablando, el rendimiento de 'NOT EXISTS' vs' LEFT JOIN' depende de la estructura de la base de datos en cuestión - verifique los planes de ejecución para estar seguro. En LINQ to Objects, la combinación tendría un mejor rendimiento porque crea una búsqueda de 'Table_B' una vez en lugar de explorar la tabla para cada' Any() '- un motor SQL podría razonablemente usar una implementación similar. – dahlbyk