【发布时间】:2011-02-06 18:08:38
【问题描述】:
我正在编写一些代码,它采用 LINQ to SQL IQueryable<T> 并进一步添加动态生成的 Where 子句。例如这里是其中一种方法的骨架:
IQueryable<T> ApplyContains(IQueryable<T> source, string field, string value)
{
Expression<Func<T, bool>> lambda;
... dynamically generate lambda for p => p.<field>.Contains(value) ...
return source.Where(lambda);
}
我可能会将这些方法中的几个链接在一起,并以 Skip/Take 页面结束。
我是否正确地认为,当最终评估 IQueryable 时,如果 lambda 表达式中有任何内容无法转换为 SQL,则会引发异常?特别是我担心我可能会不小心做了一些事情,导致 IQueryable 提前评估,然后在内存中继续评估(从而拉入数千条记录)。
根据我读过的一些内容,我怀疑IQueryable 不会像这样提前评估。谁能确认一下?
【问题讨论】:
标签: c# .net linq-to-sql iqueryable