Kann mir jemand sagen, wie eine verschachtelte SQL-Abfrage wieLinq to SQL Nested IN FROM Abfrage
schreibenSELECT * FROM X WHERE X.ID IN (SELECT Y.XID VON Y WHERE .....)
in LINQ?
Kann mir jemand sagen, wie eine verschachtelte SQL-Abfrage wieLinq to SQL Nested IN FROM Abfrage
schreibenSELECT * FROM X WHERE X.ID IN (SELECT Y.XID VON Y WHERE .....)
in LINQ?
Sie könnten versuchen:
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;
Ich weiß nicht, ob es aber funktionieren wird - keinen Grund, warum Sie wollen nicht nur zu, anstatt eine Verknüpfung tun? Zum Beispiel:
var query = from x in dataContext.X
join y in dataContext.Y.Where(...) on x.Id equals y.Xid
select x;
einen IN in SQL zu tun, müssen Sie die Funktion enthält in Linq verwenden.
So zum Beispiel:
var query = from x in GetX()
where (from y in GetY() select y.xID).Contains(x.xID)
select x;
Sie könnten auch die innere Linq-Abfrage separat definieren, wenn Sie möchten, die ein bisschen mehr lesbar
Was bedeutet das für die Leistung? Wird es einen Unterschied bei der Definition der Query Contra geben, die es inline verwendet? – Dimse
Kein Unterschied. –
I wurde für LINQ to SQL für eine NOT IN
Lösung suchen. Dank dieser Frage konnte ich google das Richtige und finden dieses Blog-Post: 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
diese Antwort hat mir sehr geholfen, danke! Ich habe ein Klassen-Setup, bei dem eine Klasse eine Liste (von Klasse2) enthält, von denen jede eine Liste (von Klasse3) enthält (um einen Container, Warenempfangsbeleg und Warenempfangsbelegzeilen in einer Lagereinrichtung nachzuahmen). Sie müssen eine Möglichkeit finden, nach einem bestimmten Teil in Class3 zu suchen, während Sie mit Class1 beginnen, ohne dass For Each jede Klasseninstanz durchläuft. Das funktioniert super (ohne das für mich nicht)! – RianBattle
Es muss eine „jemand anderes sein ist Geben Sie genau die gleiche Antwort wie Sie "Status-Popup auf dieser Website :) –
Grund, nicht beizutreten: Wenn x 1 zu viele mit y ist, wird die Verknüpfung doppelte X geben. –
@DavidB: Wahr. Ich frage mich, was das Hinzufügen eines Aufrufs zu Distinct() am Ende tun würde ... –