Почему 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();

Чистее, лаконичнее и должно работать.

Другие вопросы по тегам