Почему Linq игнорирует мое предложение where?
Я уже вижу несколько вопросов Stackru по этому вопросу, но, похоже, они не соответствуют моему сценарию. Обещаю, я посмотрел.
У меня есть несколько запросов к моей базе данных, которые я использую linq, и я не могу понять, почему генерируется неправильный SQL. Это происходит в нескольких местах в моем коде. Я надеюсь, что мы попадаем в какую-то известную ошибку, но я не могу понять, почему Linq, по-видимому, решает, что мое предложение where является тупым, и не должно добавлять его в сгенерированный запрос SQL.
Почему это?
Пример:
var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i).ToList();
Приведенный выше запрос возвращает следующий SQL
{SELECT
[Extent1].[RecordId] AS [RecordId],
[Extent1].[AnotherId] AS [AnotherId],
[Extent1].[YetAnotherId] AS [YetAnotherId],
[Extent1].[WeLikeIds] AS [WeLikeIds],
[Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
FROM [dbo].[SomeTable] AS [Extent1]}
Однако следующий запрос:
var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i);
var testingToList = testing.ToList();
Создает следующий правильный SQL
{SELECT
[Extent1].[RecordId] AS [RecordId],
[Extent1].[AnotherId] AS [AnotherId],
[Extent1].[YetAnotherId] AS [YetAnotherId],
[Extent1].[WeLikeIds] AS [WeLikeIds],
[Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds]
FROM [dbo].[SomeTable] AS [Extent1]
WHERE [Extent1].[RecordId] = '78e49f5c-0ff8-e311-93f4-00155d514a6d'}
1 ответ
Решение
Я предпочитаю лямбда-нотацию и не понимаю, почему это не сработает...
var testing = context.TableName1.Where(i => i.Param1 == object1.GuidParam).ToList();
Чистее, лаконичнее и должно работать.