Fehlermeldung "Die LINQ-Ausdruck ein node-type 'Invoke' wird nicht unterstützt LINQ to Entities" in die where-Klausel innerhalb der Methode
Wenn ich meine Abfrage ausführen:
rs.Select(x => x.id).ToArray();
Bekomme diese Fehlermeldung:
Die LINQ-Ausdruck ein node-type 'Invoke' wird nicht unterstützt LINQ to Entities
Dies ist die Methode, die den Fehler generiert (wahrscheinlich func(x)):
public IQueryable<TEntity> Compare<TEntity>(IQueryable<TEntity> source, Func<TEntity, int> func)
{
IQueryable<TEntity> res = source;
if (!this.LBoundIsNull) res = res.Where(x => func(x) >= _lBound);
if (!this.UBoundIsNull) res = res.Where(x => func(x) <= _uBound);
return res;
}
Ich die Methode aufrufen in diesem Modus:
Document doc = new Document();
doc.Number = new RangeValues(lBound, null);
using (MyEntities db = new MyEntities())
{
var rs = db.documents;
if (doc.Number != null) rs = doc.Numero.Compare(rs, x => x.number);
long[] id = rs.Select(x => x.id).ToArray();
}
Was ist falsch?
- ist
func(x)
soll übersetzt werden, um einen Sql-Benutzer definiert funciton Aufruf ? - Die Fehlermeldung, die Sie bekommen haben, sagt Ihnen genau, was falsch ist. Aufruf einer Funktion wird nicht unterstützt von EF.
- jbl,
func(x)
wird verwendet, um den Wert der Immobilie (in diesem Fallx.number
). - Sie können es nicht so... Sie hätte tun müssen, einige expression-tree-Sanitär -, es zu tun.
- LinqKit sollte hier etwas Hilfe : github.com/scottksmith95/LINQKit
- Könnte gehen Sie einfach auf
IEnumerable<TEntity>
je nach Leistung. - LinqKit ist nicht ein Zauberstab, der Sie schütteln und Magie erscheint... Zeigen, welcher Teil der LinqKit tut, was Gigi gefragt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, was Sie wollen, müssen Sie etwas tun, wie:
Wie Sie sehen können, Sie benötigen dazu einige expression-tree-Sanitär. Rufen Sie die Methode in der gleichen Weise wie zuvor.
Nun... ist es wirklich möglich, LinqKit wie vorgeschlagen von @jbl? Ja... Durch schütteln ein wenig mit dem Zauberstab...
Beachten Sie die Verwendung der
Invoke()
undExpand()
LinqKit Methoden.