Проблема в том, что вы хотите, чтобы ваш метод выполнялся локально, а не в базе данных? Если это так, 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
и фильтруете , что результат будет более эффективным, чем первая загрузка.