【发布时间】:2016-02-02 10:09:53
【问题描述】:
下面是我必须使用表达式的函数,但我认为 Entity Framework 不允许这样做。我已经在 Linq-to-SQL 中使用了这个函数并且它正在工作。我也尝试过使用 LinqKit,因为这是我在许多答案中发现的,但错误仍然存在。
public static IList<SelectListItem> From<T>(IQueryable<T> Source, Expression<Func<T, object>> Value, Expression<Func<T, string>> Text)
{
var q = from T item in Source
select new SelectListItem()
{
Text = Text.Compile()((item)),
Value = Value.Compile()((item)).ToString()
};
return q.ToList();
}
当我通过将List<T> 转换为IQueryable 来提供源时,它可以工作。
【问题讨论】:
-
你确定它在 LinqToSQL 中工作吗?你看过生成的 SQL 了吗?
-
但是,如果你真的想解决这个问题,这很容易。步骤是here。只有第 3 步会有所不同。
-
@Aron LINQ to SQL 对于无法转换为 SQL 的构造比 EF 更宽容,而是在客户端上简单地执行它们。如果它确实“工作”它一点也不会让我感到惊讶,并且 SQL 应该表明它只是请求整个
item。 -
LINQ to SQL 正在做的正是你所做的,但不会告诉你——它将所有内容加载到内存中,然后将查询转换为 LINQ to Objects。这可以消除性能,因为它可以在内存中加载 很多 不需要的对象。 EF 不允许这样做并立即警告您。
-
@hvd 这正是我要说的......
标签: c# entity-framework linq