Упорядочить, выделить и выбрать 5 лучших результатов с помощью linq - PullRequest
0 голосов
/ 07 мая 2020

Привет всем, я пытаюсь выбрать 5 различных записей из базы данных, но мне нужно, чтобы они были упорядочены и отличны. Я ищу наиболее эффективный способ сделать это. Дело в том, что метод Distinct () нарушает порядок, поэтому я пытаюсь добиться этого, группируя их, но похоже, что группировка также нарушает порядок. Может у кого-нибудь найдется хорошее решение?

Это моя текущая попытка.

public async Task<List<RecentProjectDto>> GetMostRecentProjects(int userId, int companyId)
    {
        using (var db = _dbFactory.Create())
        {


            var recentProjects = await db.ScheduleLogs
                .OfType<WorkLog>()
                .Where(x => x.UserId == userId)
                .Where(x => x.User.CompanyId == companyId)
                .OrderByDescending(x => x.End)
                .GroupBy(x => new { x.ProjectId, x.Project.Name, x.Project.Key, x.Project.Colour })
                .Select(x => new RecentProjectDto
                {
                   ProjectId = x.ProjectId,
                    ProjectName = x.Project.Name,
                    ProjectKey = x.Project.Key,
                    Colour = x.Project.Colour
                })
                .Take(5)
                .ToListAsync();
            return recentProjects;


        }
    }

1 Ответ

1 голос
/ 07 мая 2020

А что-то вроде этого работает?

var recentProjects = await db.ScheduleLogs
            .OfType<WorkLog>()
            .Where(x => x.UserId == userId)
            .Where(x => x.User.CompanyId == companyId)              
            .GroupBy(x => new { x.ProjectId, x.Project.Name, x.Project.Key, x.Project.Colour })
            .OrderByDescending(x => x.Max(a=>a.OrderDate))
            .Select(x => new RecentProjectDto
            {
                ProjectId   = x.Key.ProjectId,
                ProjectName = x.Key.Name,
                ProjectKey  = x.Key.Key,
                Colour      = x.Key.Colour
            })
            .Take(5)
            .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...