Ich bin triying, um eine Funktion zu machen, die eine where-Klausel zu einer Abfrage hinzufügt, die auf einer Eigenschaft und einem Wert basiert. Dies ist eine sehr einfache Version meiner Funktion.Hilfe mit Linq und Generics. GetValue innerhalb einer Abfrage verwenden
Private Function simplified(ByVal query As IQueryable(Of T), ByVal PValue As Long, ByVal p As PropertyInfo) As ObjectQuery(Of T)
query = query.Where(Function(c) DirectCast(p.GetValue(c, Nothing), Long) = PValue)
Dim t = query.ToList 'this line is only for testing, and here is the error raise
Return query
End Function
Die Fehlermeldung lautet: LINQ to Entities nicht die Methode in einen Laden Ausdruck 'System.Object CompareObjectEqual (System.Object, System.Object, Boolean)' Methode, und diese Methode kann nicht erkennt übersetzt.
Sieht so aus, als könnte ein GetValue in einer linq-Abfrage nicht verwendet werden. Kann ich das auf andere Weise erreichen?
Veröffentlichen Sie Ihre Antwort in C#/VB. Wählen Sie einen, bei dem Sie sich wohler fühlen.
Dank
EDIT: Statt ich auch diesen Code mit dem gleichen Ergebnis versucht
Private Function simplified2(ByVal query As IQueryable(Of T))
query = From q In query
Where q.GetType.GetProperty("Id").GetValue(q, Nothing).Equals(1)
Select q
Dim t = query.ToList
Return query
End Function
Getestet und funktioniert. Perfekt. Vielen Dank. – Jonathan
Hallo Tom. Könnten Sie mir den Link zur Verfügung stellen oder die kurze Beschreibung erhalten, warum er mit Ausdrucksbäumen funktioniert, aber nicht direkt mit Lambda arbeitet? – Ph0en1x