Wie können Sie eine IN-Unterabfrage mit LINQ to SQL verarbeiten?
-
09-06-2019 - |
Frage
Ich bin ein bisschen festgefahren.Grundsätzlich möchte ich in LINQ to SQL so etwas wie die folgende SQL-Abfrage ausführen:
SELECT f.*
FROM Foo f
WHERE f.FooId IN (
SELECT fb.FooId
FROM FooBar fb
WHERE fb.BarId = 1000
)
Für jede Hilfe wäre ich dankbar.
Danke.
Lösung
Schauen Sie mal rein Dieser Artikel.Wenn Sie das Äquivalent von IN erhalten möchten, müssen Sie grundsätzlich zuerst eine innere Abfrage erstellen und dann die Methode Contains () verwenden.Hier ist mein Übersetzungsversuch:
var innerQuery = from fb in FoorBar where fb.BarId = 1000 select fb.FooId;
var result = from f in Foo where innerQuery.Contains(f.FooId) select f;
Andere Tipps
Allgemeine Methode zur Implementierung von IN in LINQ to SQL
var q = from t1 in table1
let t2s = from t2 in table2
where <Conditions for table2>
select t2.KeyField
where t2s.Contains(t1.KeyField)
select t1;
Allgemeine Methode zum Implementieren von EXISTS in LINQ to SQL
var q = from t1 in table1
let t2s = from t2 in table2
where <Conditions for table2>
select t2.KeyField
where t2s.Any(t1.KeyField)
select t1;
from f in Foo
where f.FooID ==
(
FROM fb in FooBar
WHERE fb.BarID == 1000
select fb.FooID
)
select f;
Versuchen Sie es mit zwei separaten Schritten:
// create a Dictionary / Set / Collection fids first
var fids = (from fb in FooBar
where fb.BarID = 1000
select new { fooID = fb.FooID, barID = fb.BarID })
.ToDictionary(x => x.fooID, x => x.barID);
from f in Foo
where fids.HasKey(f.FooId)
select f
// Erstelle zuerst ein Wörterbuch/Set/Sammlung
var fids = (from fb in FooBar
where fb.BarID = 1000
select new { fooID = fb.FooID, barID = fb.BarID })
.ToDictionary(x => x.fooID, x => x.barID);
from f in Foo
where fids.HasKey(f.FooId)
select f
Versuche dies
var fooids = from fb in foobar where fb.BarId=1000 select fb.fooID
var ff = from f in foo where f.FooID = fooids select f
var foos = Foo.Where<br>
( f => FooBar.Where(fb.BarId == 1000).Select(fb => fb.FooId).Contains(f.FooId));
from f in foo
where f.FooID equals model.FooBar.SingleOrDefault(fBar => fBar.barID = 1000).FooID
select new
{
f.Columns
};
// Erstelle zuerst ein Wörterbuch/Set/Sammlung
var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID);
from f in Foo where fids.HasKey(f.FooId) select f
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow