¿Puede alguien decirme cómo escribir una consulta SQL anidada comoLINQ a SQL anidada en la consulta
SELECT * FROM X DONDE X.ID IN (SELECT Y.XID Y DE DONDE .....)
en LINQ?
¿Puede alguien decirme cómo escribir una consulta SQL anidada comoLINQ a SQL anidada en la consulta
SELECT * FROM X DONDE X.ID IN (SELECT Y.XID Y DE DONDE .....)
en LINQ?
Usted podría intentar:
var yIds = from y in dataContext.Y
where ...
select y.XId;
var query = from x in dataContext.X
where yIds.Contains(x.Id)
select x;
No sé si funcionará, aunque - ninguna razón por la que no quiere hacer sólo una unión en su lugar? Por ejemplo:
var query = from x in dataContext.X
join y in dataContext.Y.Where(...) on x.Id equals y.Xid
select x;
Para hacer una IN en sql, debe usar la función Contiene en Linq.
Así, por ejemplo:
var query = from x in GetX()
where (from y in GetY() select y.xID).Contains(x.xID)
select x;
También podría definir la consulta LINQ interno por separado si se quiere, que es un poco más legible
¿Qué significa esto para el rendimiento? ¿Habrá una diferencia en la definición de la consulta contra usarla en línea? – Dimse
Sin diferencia en absoluto. –
que estaba buscando una solución NOT IN
para LINQ a SQL. Gracias a esta pregunta yo era capaz google lo correcto y encontrar esta entrada del blog: The NOT IN clause in LINQ to SQL
C#
NorthwindDataContext dc = new NorthwindDataContext();
var query =
from c in dc.Customers
where !(from o in dc.Orders
select o.CustomerID)
.Contains(c.CustomerID)
select c;
VB.net
Dim db As New NorthwinDataContext()
Dim query = From c In dc.Customers _
Where Not (From o in dc.Orders _
Select o.CustomerID).Contains(c.CustomerID) _
Select c
esta respuesta me ayudó mucho, ¡gracias! Tengo una configuración de clase donde una clase posee una Lista (De Clase2) de la cual cada una posee una Lista (De Clase3) (para imitar un contenedor, un bono de recepción de mercancías y mercancías que reciben líneas de comprobante en una instalación de depósito). Es necesario encontrar una forma de buscar una parte específica en Class3 mientras se inicia en Class1 sin For Each iterando a través de cada instancia de clase. Esto funciona muy bien (¡sin el No para mí)! – RianBattle
No tiene que ser un "alguien más es escribiendo exactamente la misma respuesta que tu "emergente de estado en este sitio :) –
Razón para no unirse: si x es 1 a muchos con y, la unión dará x duplicados. –
@DavidB: cierto. Me pregunto qué agregaría una llamada a Distinct() al final ... –