强制执行 IQueryable?

2024-05-05

我有一个“没有转换为 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(使用前将#替换为@)

强制执行 IQueryable? 的相关文章

随机推荐