【发布时间】:2012-08-31 09:13:47
【问题描述】:
我有一个泛型类型类 Filter,它采用一些 lambda 表达式从类型中选择值,以便该类可重用。该类在另一个泛型类型类 Search 中使用,它将使用 Filter 选择最终将在下拉列表中使用的类型的不同项目。
我删除了这些不重要的代码。
public class Filter<T>
{
public string Name;
public Func<T, string> Key;
public Func<T, string> Value;
}
public class Search<T>
{
MyDBContext db = new MyDBContext();
IQueryable<T> Model = db.Stuff.OrderBy(a => a.TermID);
Filter filter = new Filter(
Name: "Term",
Value: a => a.TermID.ToString(),
Key: a => a.Term.TermType.Name
);
var filterItems = Model
.Select(a => new { Key = filter.Key(a), Value = filter.Value(a)})
.OrderBy(t => t.Key)
.Distinct()
.ToArray();
}
我收到运行时错误:The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
我尝试使用强类型而不是匿名类型,并在过滤器中使用Expression<Func<T,string>>。
经过数小时的搜索和尝试不同的事情,我不确定如何完成这项工作。 感谢您的帮助。
【问题讨论】:
-
我怀疑
filter.Key和filter.Value所做的任何事情都可以从 LINQ 转换到您的后端存储。 -
如果 Invoke 是主要问题,可以通过使用 ExpressionVisitor 融合两个表达式来避免。我不在电脑前,但如果你没有得到任何快乐,请提醒我,我会添加一个示例。
标签: c# linq entity-framework