2017-05-21 70 views
0

我在查詢2個表,ClubLinkClubUser。我想要從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 

我得到了正確的行。

我嘗試此查詢到實體框架的核心這樣的轉變,但我回去超過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] 
轉換

我沒有看到group by子句。

我的實體框架核心查詢有什麼問題?

回答

0

我沒有小組條款。

我想你添加所有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); 

希望它能幫助。

+0

你好瑞安,如果我嘗試刪除groupby中的一些clube字段,我會在下面的選擇中放棄那些匿名字段。例如,如果我刪除了t.clube.Nome,我就放棄了Nome = g.Key.Nome, – jolynice

+0

您好jolynice,您想要在哪個字段上進行分組?我會更新我的答案取決於他們 – Ryan

+0

您好瑞安,感謝您的幫助,其實我只需要這個字段 t.clube.Nome, t.clube.NomeNaCamisola, t.clube.NumNaCamisola, t.clube。 Posicao, t.clube.Situacao ,, – jolynice