gpt4 book ai didi

linq - 强制执行 IQueryable?

转载 作者:行者123 更新时间:2023-12-03 15:15:33 24 4
gpt4 key购买 nike

我有一个我想在 IQueryable 上执行的“没有转换为 SQL”的方法,有没有办法强制 IQueryable 执行而不必将它存储在某个中间类中?

最佳答案

问题是您希望您的方法在本地执行而不是在数据库中执行吗?如果是,AsEnumerable是你的 friend 。这是一个非常简单的方法,例如:

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/

24 4 0