2010-03-04 8 views
5

Wie kann ich eine Linq-Suche machen, die Nullen (oder Nullables) ignoriert?Linq-Suche, die Nullen ignoriert

Ich habe eine Methode

IEnumerable<X> Search(int? a, int? b, int? c) 

Und ich will es Streichhölzer auf einem der ints zurückzukehren? das sind nicht null.

IE: wenn a und c Werte 1 und 9 und b wird die Null-Suche sollte 5+ paramters (grob) zu

SELECT * 
FROM [TABLE] 
WHERE a = 1 
AND c = 9 

Meine richtigen Methode machen, so Iterieren Kombinationen direkt aus haben ist.

Antwort

5
IEnumerable<X> query = items; 
if (a.HasValue) { 
    query = query.Where(x => x.a == a.Value) 
} 
if (b.HasValue) { 
    query = query.Where(x => x.b == b.Value) 
} 
if (c.HasValue) { 
    query = query.Where(x => x.c == c.Value) 
} 
4
var result = from row in table 
where (!a.HasValue || row.a == a.Value) 
&& (!b.HasValue || row.b == b.Value) 
&& (!c.HasValue || row.c == c.Value) 
select row; 
+0

Haben Sie diese getestet? Ich erhalte eine 'InvalidOperationException', wenn ich versuche, das Ergebnis aufzuzählen. –

+0

Haben Sie weitere Details zu dem Fehler? Was ist die Fehlermeldung? –

+0

@David '{" Nullable-Objekt muss einen Wert haben. "}' –