7 Stimmen

LINQ - Enthält mit anonymen Typ

Bei Verwendung dieses Codes (vereinfacht für die Frage):

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C });

var rows2 = (from t2 in db.TABLE2
    where (rows1.Contains(t2.COLUMN_A))
    select t2;

Ich habe den folgenden Fehler erhalten:

Die Typargumente für die Methode 'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource)' können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typ Argumente explizit anzugeben.

Ich muss das erste Ergebnis nach COLUMN_B filtern, aber ich weiß nicht wie. Gibt es eine Möglichkeit, es zu filtern?

14voto

JaredPar Punkte 699699

Um Contains verwenden zu können, müssen Sie eine Instanz des Typs in der IEnumerable<T> . Dies ist bei anonymen Typen äußerst schwierig.

Stattdessen würde ich die Any Überladung der Erweiterungsmethode, mit der Sie ein Vergleichslambda angeben können. Zum Beispiel

var rows2 = (from t2 in db.TABLE2
    where (rows1.Any(x => x.COLUMN_B == t2.COLUMN_A))
    select t2;

1voto

Mike Two Punkte 42868

Versuchen Sie es mit Any

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C });

var rows2 = (from t2 in db.TABLE2
    where (rows1.Any( r => r.COLUMN_B == t2.COLUMN_A))
    select t2;

0voto

Luiscencio Punkte 3775

Funktioniert das?

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C }).ToList();

var rows2 = (from t2 in db.TABLE2
    where (rows1.Contains(t2.COLUMN_A))
    select t2;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X