Используя Linq, легко выполнить функцию для проецирования IEnumerable.
var orders = new List<Order>();
orders.Where(x => x.Id > 50).Select(x => new SomethingElse(x.Name));
При использовании EntityFramework и IQueryable это невозможно. Вместо этого вы получаете неподдерживаемое исключение во время выполнения, потому что у вас не может быть функции внутри Select.
Не работает:
var db = new Order(); db.MyEntities.Where(x => x.Id > 50).Select(x => new SomethingElse(x.Name)).Take(10);
Существует ли такой способ или можно ли создать способ его работы?
Я понимаю, что это не работает, потому что он не может преобразовать функцию во что-то, что может понять SQL, однако, если бы был метод расширения под названием «Выполнить», который мог бы выполняться в памяти после выполнения всего linq до и после него, будет ли это работать?
База данных вытянет только > 50 И только ТОП 10, только после этого будет
var db = new Order(); db.MyEntities.Where(x => x.Id > 50).Execute(x => new SomethingElse(x.Name)).Take(10);
Для уточнения: требуется, чтобы он сохранялся как IQueryable даже после Sleect()