LINQ Where-Klausel mit Enthält, wo die Liste hat komplexe Objekt
Ich habe gesehen, viele Beispiele von LINQ mit einer enthält eine einfache Liste der Objekte:
var intList= new List<int>() { 1, 2, 3 };
var result = db.TableRecords.Where(c => intList.Contains(c.RecordId)).ToList();
Was ich versuche zu tun, scheint etwas komplizierter (finde ich). Ich habe eine Zeile code ähnlich wie diese bekommt von mir die Liste die ich brauche:
var xzList = db.Relations.Where(r => someOtherList.Contains(r.zId))
.Select(r => new { AId = r.xId, BId = r.zId })
.ToList();
Und jetzt möchte ich, um das Ergebnis ähnlich wie im vorherigen Beispiel, aber die Liste hat jetzt ein anonymer Typ mit zwei ints. Wie bekomme ich jetzt result
wo RecordId
im TableRecords
entspricht der AId
im anonymen Typ, für jeden anonymen Typ in xzList
?
- var intList = xzList.Wählen Sie(listObject => listObject.AId).ToList();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Klingt wie Sie sind unsicher, wie man die Werte aus Ihrem anonymen Typ. Sie können GunnerL3510 Lösung dump einer Liste, oder Sie sollten in der Lage sein, um inline-es wie folgt:
Da Sie die Benennung der Werte in der anonymen Art, Sie beziehen sich auf Sie, genauso wie Eigenschaften.
Wenn Sie es vorziehen, eine strukturierte Vorgehensweise, die Sie verwenden können, diese Methode.
c => xzList.Any(n => n.AId == c.RecordId)
aber es ist mehr oder weniger das gleiche. Wenn Sie möchten erste dump alleAId
auf eine getrennte Sammlung (was könnte schneller sein, "GunnerL3510 Lösung"), sollten Sie erwägen, einHashSet<int>
wie:new HashSet<int>(xzList.Select(n => n.AId))
.db
- Objekt ist eine Art von SQL -DataContext
Sie nicht wollen, zu nennen.ToList()
aufxzlist
es sei denn, Sie haben eine noch nicht ausgesprochene Grund dafür gibt. Wenn Sie es Taten, Sie würde damit zwei relativ teure db-Aufrufe statt.Etwas wie dieses: