我有一个要在IQueryable上执行的“没有转换为SQL的方法”,是否有一种方法可以强制IQueryable执行而不必将其存储在某些中间类中?
最佳答案
您是否希望方法在本地而不是在数据库中执行的问题?如果是这样,AsEnumerable
是您的朋友。这是一个非常简单的方法,类似于:
public IEnumerable<T> AsEnumerable(IEnumerable<T> source)
{
return source;
}
重要的是,它使结果的编译时类型为
IEnumerable<T>
而不是IQueryable<T>
,这意味着您之后调用的任何LINQ查询运算符将是LINQ to Objects而不是LINQ to SQL。例如:
var query = context.Employees
// Filtering performed in SQL
.Where(emp => emp.IsFullTime)
.AsEnumerable()
// Projection performed locally; ComputeSalary has no
// SQL equivalent
.Select(emp => new { Employee = emp,
Salary = ComputeSalary(emp) });
您可以按照其他地方的建议调用
ToList
,但是如果您正在执行过滤并且实际上并不需要内存中的完整列表,则调用AsEnumerable
并进行过滤将比首先加载所有内容更有效。关于linq - 强制执行IQueryable?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/792814/