könnten Sie Reflexion
var l = new List<object>();
l.Add(new {key = "key1", v = "value1"});
l.Add(new {key = "key2", v = "value2", v2="another value"});
l.Add(new {key = "key3", v = "value3", v3= 4});
l.Add(new {key = "key4", v = "value4", v4 = 5.3});
var r = l.Where(x=> (string)x.GetType().GetProperty("key")?.GetValue(x) == "key1");
Holen Sie die Art Ihrer Elemente verwenden und die Eigenschaft, die Sie suchen, nicht finden. Holen Sie dann den Wert für die aktuelle Instanz und vergleichen Sie ihn mit dem Wert, nach dem Sie filtern möchten.
Auf der anderen Seite hat dieser Ansatz den Vorteil, auch dann zu arbeiten, wenn die Liste Elemente mehrerer anonymer Typen enthält (wenn sie unterschiedliche Eigenschaften haben), solange sie alle die Eigenschaft haben, nach der Sie filtern.
EDIT
Mit C# 6 können Sie den ?
Operator verwenden, die Art eines Inline-Check für null ist. Dh, wenn GetProperty()
kehrt null
, da die Eigenschaft nicht gefunden wird, der Ausdruck null
kehrt ohne GetValue()
Ausführung
Sie wären besser dran, ein Array zu initialisieren, damit es den anonymen Typ annimmt, wie 'var stuff = new [] {new {id = 1, name =" Jakob "}, ....}; Wenn Sie das Wo tun, wird der Lambda den Typ kennen und Sie können auf die Eigenschaften zugreifen. Entweder das oder Wechsel von "Objekt" zu "dynamisch". – juharr