Как выполнить операцию соединения с группой с помощью In EF CORE - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть две таблицы Clients и ClientEvaluations, эти таблицы связаны через внешний ключ.Каждая ClientEvaluation имеет FK для одной клиентской сущности.

Теперь мне нужно запросить у всех клиентов их последнюю оценку, не более одной оценки для каждого клиента.Обратите внимание, что у каждой оценки есть дата.

Этот код достигает этого в SQL.

SELECT C.Id, MAX(E.EvaluationDate) FROM [dbo].[Clients] as C

JOIN [dbo].[ClientEvaluations] AS E ON E.ClientId = C.Id

GROUP BY C.Id

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

var lastEvaluations = _db.ClientEvaluations.GroupBy(x => x.ClientId, (x, y) => new { ClientId = x, EvaluationDate = y.Max(z => z.EvaluationDate), }).ToList();

Но запрос здесь, конечно, возвращает только ClientId и дату, как я могу включить всю сущность клиента?

1 Ответ

0 голосов
/ 20 сентября 2019

Надеюсь, вы правильно настроили _dbContext .Затем вы можете использовать include для выполнения операции объединения.

var results = _dbcontext
                .Clients
                .Include(x => x.ClientEvaluations) //join
                .GroupBy(y => y.Id) // group by
                .Select(z => new 
                   {
                       Id = z.Key.Value,
                       Max = z.Max(x => x.EvaluationDate),
                   }).ToList();

или

var results =   from c in _dbcontext.Clients
                join e in _dbcontext.ClientEvaluations
                on c.Id equals e.ClientId
                group c by c.Id into cg
                select new
                {
                    Id = Id = cg.FirstOrDefault().Id,
                    Max = cg.Max(x => x.EvaluationDate),
                }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...