Kir*_*ein 15 linq iqueryable delayed-execution
我有一个'无法转换为SQL'的方法,我想在IQueryable上执行,有没有办法强制IQueryable执行而不必将其存储在某个中间类中?
Jon*_*eet 28
问题是您希望您的方法在本地执行而不是在数据库中执行?如果是的话,AsEnumerable是你的朋友.这是一个非常简单的方法,例如:
public IEnumerable<T> AsEnumerable(IEnumerable<T> source)
{
return source;
}
Run Code Online (Sandbox Code Playgroud)
重要的是它使结果的编译时类型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) });
Run Code Online (Sandbox Code Playgroud)
您可以ToList按照其他地方的建议进行调用,但如果您正在进行过滤并且不需要内存中的完整列表,则调用AsEnumerable和过滤该结果将比首先加载所有内容更有效.
List<Employees> myEmployees = myqueryable.ToList();
Run Code Online (Sandbox Code Playgroud)
然后你可以在那个列表上做你的linq东西.
| 归档时间: |
|
| 查看次数: |
12022 次 |
| 最近记录: |