Проект только что переключился с linq-to-sql на linq-to-entity, и теперь я получаю сообщение об ошибке
The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities.
для этой строки:
var a = db.Table.Single(d => d.Date == dates[0]);
(Исправить это в данном конкретном случае легко, как в
var firstDate = dates[0];
var a = db.Table.Single(d => d.Date == firstDate);
)
Но почему это работает в linq-to-sql, а не в linq-to-entity? Они сделали linq-to-entity хуже, чем linq-to-sql? Что мне не хватает?
Это потому, что L2E просто пытается преобразовать ваш запрос в команду sql. Таким образом, любые дополнительные вещи (такие как .ToString () и другие вещи, которые не могут быть переведены в SQL) приводят к этому исключению.
Тем не менее, L2S, как linq для объектов, реализует IEnumerable. Таким образом, их цель другая: L2E для преобразования запросов linq в команды sql, L2O для работы с объектами IEnumerable в памяти и L2S для моделирования и работы с базой данных.
Теперь, если вы хотите иметь возможность использовать ваши запросы L2S в вашем проекте EF (используя L2E), вы должны сначала преобразовать данные, полученные из вашего DbContext, в IEnumerable:
var a = db.Table.AsEnumerable().Single(d => d.Date == dates[0]);
// or any other methods...