Где предложение не принимает параметризованное значение, но принимает жестко закодированное значение в linq
В моем проекте MVC я использую EF, где сущности (edmx) генерируются из базы данных Universe с использованием Rocket U2. После генерации edmx я просто почувствовал, что это будет прямой бизнес по извлечению данных с помощью LINQ, но это не так, как я сразу же наткнулся на проблему с моим очень простым и первым оператором LINQ, который заключается в следующем
1. var test1 = userRepo.QueryAll().Where(x => x.Code == model.UserName);
// generated SQL
FROM User AS Extent1
WHERE (Extent1.Code = ?) OR ((Extent1.Code IS NULL) AND (? IS NULL))}
Просто не так ли? На самом деле это не то, что я испытал до сих пор: оператор SQL, сгенерированный LINQ, довольно странный, когда я передаю значение свойства в предложение where, в то время как следующий оператор выполняется совершенно нормально там, где у меня жестко закодированное значение.
2. var test1 = userRepo.QueryAll().Where(x => x.Code == "JK");
// generated SQL
FROM User AS Extent1
WHERE 'JK' = Extent1.Code}
Теперь, если я вернусь к своему первому запросу LINQ, я заметил, что это сработает, если я перечислю результат перед предложением where, т.е. следующим образом
3. var test = userRepo.QueryAll().ToList().Where(x => x.Code == model.UserName);
Может кто-нибудь объяснить, что я делаю не так здесь. Хотя я могу перечислить результат до применения фильтров, но это не то, что подходит для дальнейшей разработки, где мне нужно работать с объединениями и т. Д.
Вышеуказанное поведение одинаково, даже если вы работаете напрямую с DbContext, а не с отдельным репозиторием.