我有一个“没有转换为 SQL”的方法,我想在 IQueryable 上执行该方法,有没有办法强制 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
正如其他地方所建议的,但如果您正在进行过滤并且并不真正需要full内存中的列表,调用AsEnumerable
和过滤that结果将比先加载所有内容更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)