Ich habe eine dynamische Liste von Objekten, für die ich den Lambda-Ausdruck where-Klausel zum Filtern von Elementen verwende. Stellen Sie sich zum Beispiel vor, dass es drei Eigenschaften hat: foo, bar und baz
class item // let this be current class in dynamic item list
{
bool foo;
string bar;
string baz;
}
Wenn ich nun eine Artikelliste filtern möchte, in der foo falsch ist, kann ich den folgenden Ausdruck verwenden
var filtered = itemList.Where("!foo");
Ich kann die Liste sogar nach Zeichenfolgenwert filtern als
var filtered = itemList.Where("bar==\"value\""); \\all items with bar = value
Was ich tatsächlich überprüfen möchte, ist, ob das Element in der Liste einen bestimmten Zeichenfolgenwert hat, der nicht null Leerzeichen enthält. Ich habe versucht, folgenden Code
var filtered = itemList.Where("!String.IsNullOrWhiteSpace(baz)");
Es warf einen Fehler
Der Ausdruck vom Typ 'System.Func`2 [DynamicType, System.Object]' kann nicht für Parameter vom Typ 'System.String' der Methode 'Boolean IsNullOrWhiteSpace (System.String)' verwendet werden.
Obwohl es mir gelungen ist, durch folgende Abfrage ein Ergebnis zu erzielen
var filtered = itemList.Where("baz!=null && baz!=\"\"");
Ich wollte bestätigen, ob es eine Möglichkeit gibt, String.IsNullOrWhiteSpace()
in dieser Abfrage zu verwenden.
Sie können "! String.IsNullOrWhiteSpace (baz)" durch "! (Baz == null || baz.Trim () == string.Empty)" ersetzen und es sollte funktionieren.
Ich habe kein Problem mit Ihrem Ausdruck - es funktioniert gut.
Ich habe dies mit Objekten und Entitäten gegen einen EF-Speicher verwendet.
Der Ausdruck vom Typ 'System.Func`2 [DynamicType, System.Object]' kann nicht für Parameter vom Typ 'System.String' der Methode 'Boolean IsNullOrWhiteSpace (System.String)' verwendet werden.
Wenn man sich also den Fehler ansieht, heißt es (Verschieben der Reihenfolge):
Die Methode IsNullOrWhiteSpace
, die einen Boolean
IsNullOrWhiteSpace
zurückgibt, erwartet einen Parameter vom Typ System.String
. Was jedoch empfangen wurde, war Expression of type System.Func``2[DynamicType,System.Object]'
Möglicherweise haben Sie für Ihren Vergleich eher auf ein Objekt als auf einen Zeichenfolgenwert verwiesen. Ohne Beispielcode für die von Ihnen verwendeten Objekte und ob Sie Objekte, Entitäten oder LinQ to SQL verwenden (was ich nicht ausprobiert habe), können wir nur raten, was Sie für den Ausdruck angegeben haben.
Schließlich, was ist ein
'dynamische Artikelliste'?
Verwenden Sie Dynamic
oder handelt es sich um eine normale List<Item>
?