0

我有两个表 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

我也试过这个,但我想要实现的问题是我需要从这个查询中取回客户端实体属性。

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

但是这里的查询当然只返回 ClientId 和日期,我怎样才能包含整个客户端实体?

4

1 回答 1

0

我希望你已经正确配置了 _dbContext。然后就可以使用include来做join操作了。

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();
于 2019-09-20T06:44:14.933 回答