Quelqu'un peut-il me dire comment écrire une requête SQL imbriqué commeLINQ to SQL imbriqué à partir de requête
SELECT * FROM X OÙ X.ID IN (SELECT Y.XID DE Y OU .....)
dans LINQ?
Quelqu'un peut-il me dire comment écrire une requête SQL imbriqué commeLINQ to SQL imbriqué à partir de requête
SELECT * FROM X OÙ X.ID IN (SELECT Y.XID DE Y OU .....)
dans LINQ?
Vous pouvez essayer:
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;
Je ne sais pas si cela fonctionnera bien - une raison pour laquelle vous ne voulez pas juste une jointure ne place? Par exemple:
var query = from x in dataContext.X
join y in dataContext.Y.Where(...) on x.Id equals y.Xid
select x;
Pour faire un IN en SQL, vous devez utiliser la fonction Contient dans Linq.
Ainsi, par exemple:
var query = from x in GetX()
where (from y in GetY() select y.xID).Contains(x.xID)
select x;
Vous pouvez également définir la requête LINQ intérieure séparement si vous voulez, qui est un peu plus lisible
Qu'est-ce que cela signifie pour la performance? Y aura-t-il une différence dans la définition de la requête contra en l'utilisant en ligne? – Dimse
Aucune différence du tout. –
Je cherchais une solution NOT IN
pour LINQ to SQL. Merci à cette question, j'ai pu google la bonne chose et trouver ce 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
cette réponse m'a beaucoup aidé, merci! J'ai une configuration de classe où une classe détient une liste (de classe2) dont chacune contient une liste (de classe3) (pour imiter un conteneur, un bon de réception de marchandises et des marchandises recevant des bons dans un entrepôt). Besoin de trouver un moyen de rechercher une partie spécifique dans Class3 tout en commençant à Class1 sans pour chaque boucle à travers chaque instance de classe. Cela fonctionne très bien (sans le pas pour moi)! – RianBattle
Il quelqu'un a besoin d'être un » autre est en tapant exactement la même réponse que vous "popup d'état sur ce site :) –
Raison de ne pas rejoindre: Si x est de 1 à plusieurs avec y, la jointure donnera des x dupliqués. –
@DavidB: True. Je me demande ce que l'ajout d'un appel à Distinct() à la fin ferait ... –