Entity Framework Core 2.1 группа не работает должным образом - PullRequest
2 голосов
/ 07 мая 2019

Я использую Entity Framework Core 2.1.4 и написал базовый пример запроса из C #, как показано ниже.

var myList = context.HastaAdres.OrderBy(p => p.ID).Take(20).GroupBy(p => p.IlKodu).Select(d => d.FirstOrDefault()).Select(p => p.ID).ToList();

Но в профилировщике SQL выполняется код, как показано ниже. В SQL нет группировки по группам, и она сильно отличается от классической структуры сущностей. Так что и результат другой. Мне нужен только один столбец в результате. Но сначала запрос, вернуть все столбцы. Кроме того, количество строк отличается от второго запроса.

SQL, сгенерированный Entity Framework Core

SELECT [t].[ID], [t].[IlKodu], [t].[AcikAdres], [t].[BucakAdi], [t].[BucakKodu], [t].[BulvarKodu], [t].[CaddeKodu], [t].[CreatedBy], [t].[CreatedDate]
FROM (
    SELECT TOP(20) [p].[ID], [p].[IlKodu], [p].[AcikAdres], [p].[BucakAdi], [p].[BucakKodu], [p].[BulvarKodu], [p].[CaddeKodu], [p].[CreatedBy], [p].[CreatedDate]
    FROM [Ortak].[HastaAdres] AS [p]
    ORDER BY [p].[ID]
) AS [t]
ORDER BY [t].[IlKodu]

Когда я попробовал этот метод в Entity Framework, он генерирует идеальный код.

SQL, сгенерированный платформой Entity

SELECT 
    (SELECT TOP (1) 
        [Limit2].[ID] AS [ID]
        FROM ( SELECT TOP (20) [Extent2].[ID] AS [ID], [Extent2].[IlKodu] AS [IlKodu]
            FROM [Ortak].[HastaAdres] AS [Extent2]
            ORDER BY [Extent2].[ID] ASC
        )  AS [Limit2]
        WHERE ([Distinct1].[IlKodu] = [Limit2].[IlKodu]) OR (([Distinct1].[IlKodu] IS NULL) AND ([Limit2].[IlKodu] IS NULL))) AS [C1]
    FROM ( SELECT DISTINCT [distinct].[IlKodu] AS [IlKodu]
        FROM ( SELECT TOP (20) 
            [Extent1].[IlKodu] AS [IlKodu]
            FROM [Ortak].[HastaAdres] AS [Extent1]
            ORDER BY [Extent1].[ID] ASC
        )  AS [distinct]
    )  AS [Distinct1]

В чем может быть причина этой ситуации?

1 Ответ

1 голос
/ 08 мая 2019

Я узнал, что EF Core не поддерживает уровень базы данных Group By и принимает элемент. Но в EF Core 2.1 появилась поддержка группы к тому времени: сумма, минимум, максимум, среднее на уровне базы данных (вы можете увидеть по этой ссылке https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.1#linq-groupby-translation от комментария @jpgrassi)

Итак, я изменил свой код запроса на минимальное значение и затем получил эту строку из базы данных. Итак, это решило мою проблему. Но, я надеюсь, в последнее время Microsoft поддерживает группирование на уровне базы данных.

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