如何在实体框架核心中创建组子句



我正在尝试查询 2 个表,ClubLinkClubUser .我想检索从链接俱乐部用户中的最后一个日期开始分配用户的最后一个俱乐部。

我有正确的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

我选对了一排。

我尝试像这样将此查询转换为实体框架核心,但我返回了 1 行以上:

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]

我没有看到按子句分组。

我的实体框架核心查询中出了什么问题?

我没有组条款。

我认为您将所有clube表字段添加到您的组子句中,因此您的组子句失去了其性质并且没有编译为 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);

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新