Linq для сущностей: заменить OrderByDescending / First на Max? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующий запрос, который я использую для извлечения данных из базы данных SQL с использованием Entity Framework.

var result = ViewHelper.Create<Keyword>().Find(query, inc => inc.Page)
    .GroupBy(g => g.PageId)
    .Select(g => g.OrderByDescending(o => o.Volume).First())
    .OrderByDescending(r => r.Volume)
    .Select(r => new LinkDto(
        currentUrl.ToAbsolute(r.Page.Path),
        r.Term.HighlightExcept(meta.ReservedWords)));

Если вы игнорируете первую строку (которая является нашей собственной информацией из репозитория), следующаяВажными вещами являются 3 строки.

Я пытаюсь сгруппировать строки по PageId, выбрав одну из них с наибольшим значением Volume.

Затем из сгруппированныхданные, я переупорядочиваю снова на Volume, чтобы вернуть весь список в порядке Volume.

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

Первое, что приходит на ум, это то, что элементы OrderByDescending/First можно заменить на Max - к сожалению, я не смог их получитьсинтаксически соединяться друг с другом.

Можно ли улучшить это утверждение.

Для полноты вот таблица.

CREATE TABLE [dbo].[Keyword] (
    [Id]     SMALLINT      NOT NULL,
    [Term]   VARCHAR (100) NOT NULL,
    [Volume] INT           NOT NULL,
    [PageId] SMALLINT      NOT NULL,
    CONSTRAINT [PK_Keyword] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [AK_Keyword_Keyword] UNIQUE NONCLUSTERED ([Term] ASC),
    CONSTRAINT [FK_Keyword_Page] FOREIGN KEY ([PageId]) REFERENCES [dbo].[Page] ([Id])
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...