Почему запрос linq-to-sql переводится в подзапрос? - PullRequest
4 голосов
/ 04 декабря 2011

Почему этот запрос linq:

(from c in Orders
select new 
{
   Id=c.Id, 
   DeliveryDate = c.DeliveryDate.Value
}).Take(10)

переводится в

SELECT TOP (10) [t1].[Id], [t1].[value] AS [DeliveryDate]
FROM (
    SELECT [t0].[Id], [t0].[DeliveryDate] AS [value]
    FROM [Orders] AS [t0]
    ) AS [t1]

, но когда я изменяю DeliveryDate = c.DeliveryDate.Value на DeliveryDate = c.DeliveryDate SQL-запрос выглядит так просто:

SELECT TOP (10) [t0].[Id], [t0].[DeliveryDate]
FROM [Orders] AS [t0]

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Я думаю, это потому, что переводчик LINQ2SQL недостаточно оптимизирован. Использование свойства (Value) инициирует создание подзапроса, который оказывается ненужным.

Стоит отметить, что любая СУБД, достойная своей соли, будет генерировать идентичные планы запросов для обоих запросов SQL, поэтому в конечном итоге это не будет иметь значения в любом случае.

0 голосов
/ 04 декабря 2011

Возможно, ошибка / неоптимизированная проблема.Я не могу объяснить это по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...