C# 如何在实体框架核心中创建group子句
我正在尝试查询两个表,C# 如何在实体框架核心中创建group子句,c#,sql,clause,linq-group,C#,Sql,Clause,Linq Group,我正在尝试查询两个表,Club和LinkClubUser。我想检索用户从LinkclubUser中的最后一个日期分配的最后一个俱乐部 我有正确的SQL查询: select top 1 max(A.DataInscricao), A.Nome, A.NomeNaCamisola, A.NumNaCamisola, A.Posicao, A.Situacao from Clube as A inner join LinkClubeUser as B on
Club
和LinkClubUser
。我想检索用户从LinkclubUser中的最后一个日期分配的最后一个俱乐部
我有正确的SQL查询:
select top 1
max(A.DataInscricao),
A.Nome, A.NomeNaCamisola, A.NumNaCamisola, A.Posicao, A.Situacao
from
Clube as A
inner join
LinkClubeUser as B on a.Id = b.IdClube
where
b.IdUser ='9faea9f3-28d7-4e34-8572-3102726d3c75'
group by
A.Nome, A.NomeNaCamisola, A.NumNaCamisola, A.Posicao, A.Situacao
我排对了
我尝试像这样将此查询转换为Entity Framework Core,但返回了不止一行:
var query = _dbContext
.LinkClubeUser
.Join(_dbContext.Clube,
lnk => lnk.IdClube,
clube => clube.Id,
(Lnk, clube) => new { Lnk, clube })
.Where(t => t.Lnk.IdUser == "9faea9f3-28d7-4e34-8572-3102726d3c75")
.GroupBy(t => new
{
t.clube.Id,
t.clube.Nome,
t.clube.NomeNaCamisola,
t.clube.NumNaCamisola,
t.clube.Posicao,
t.clube.Situacao,
t.clube.DataInscricao
}, t => t.clube)
.Select(g => new
{
Nome = g.Key.Nome,
NomeNaCamisola = g.Key.NomeNaCamisola,
NumNaCamisola = g.Key.NumNaCamisola,
Posicao = g.Key.Posicao,
Situacao = g.Key.Situacao,
DataInscricao = (DateTime)g.Max(p => p.DataInscricao)
}).Take(1);
但这段代码是由实体框架核心转换的,如下所示
SELECT
[lnk].[Id], [lnk].[Date], [lnk].[IdClub],
[lnk].[IdQuestionario], [lnk].[IdUser], [clube].[Id],
[clube].[ClubActual], [clube].[Date], [clube].[Nome],
[clube].[NomeNaCamisola], [clube].[NumNaCamisola], [clube].[Posicao],
[clube].[Situacao]
FROM
[LinkClubeUser] AS [lnk]
INNER JOIN
[Clube] AS [clube] ON [lnk].[IdClube] = [clube].[Id]
WHERE
[lnk].[IdUser] = N'9faea9f3-28d7-4e34-8572-3102726d3c75'
ORDER BY
[clube].[Id], [clube].[Nome], [clube].[NomeNaCamisola],
[clube].[NumNaCamisola], [clube].[Posicao], [clube].[Situacao],
[clube].[DataInscricao]
我没有看到GROUPBY子句
我的实体框架核心查询有什么问题
我没有团体条款
我认为您将所有clube
表字段添加到了group子句中,因此group子句失去了它的性质,没有编译成SQL,而您在第一个SQL查询中添加了其中一些字段
编辑
var query = (from user in _dbContext.LinkClubeUser
Join club in _dbContext.Clube on user.IdClub equals club.Id into cu
let clubUser = cu.DefaultIfEmpty() // outer join if you need it
Where clubUser.IdUser == "9faea9f3-28d7-4e34-8572-3102726d3c75")
Select new
{
Nome = user.Nome,
NomeNaCamisola = user.NomeNaCamisola,
NumNaCamisola = user.NumNaCamisola,
Posicao = user.Posicao,
Situacao = user.Situacao,
DataInscricao = (DateTime)clubUser.Max(p => p.DataInscricao)
}).Take(1);
希望能有所帮助。你好,Ryan,如果我试图删除groupby中的一些clube字段,我会在下面的选择中删除匿名中的这些字段。例如,如果我删除了t.clube.Nome,我就会松开Nome=g.Key.Nome,Hello jolynice,您想对哪些字段进行分组?我会更新我的答案取决于他们你好Ryan,谢谢你的帮助,事实上我只需要这个字段t.clube.Nome,t.clube.NomeNaCamisola,t.clube.NumNaCamisola,t.clube.Posicao,t.clube.Situacao,,谢谢Ryan的工作,现在我需要理解lol。非常感谢