2017-05-21 3 views
0

erstellen Ich versuche, 2 Tabellen, Club und LinkClubUser abzufragen. Ich möchte den letzten Club, der einem Benutzer zugewiesen wurde, ab dem letzten Datum im LinkclubUser abrufen.Wie Gruppenklausel in Entity Framework Core

Ich habe das Recht SQL-Abfrage:

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 

ich die richtige Reihe bekam.

Ich versuche, diese Abfrage Entity Framework Kern so zu konvertieren, aber ich wieder mehr als 1 Zeile:

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); 

aber dieser Code von Entity Framework-Core wie diese

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] 
umgewandelt

Ich sehe die Gruppierung nach Klausel nicht.

Was ist falsch in meiner Entity Framework Core Abfrage?

Antwort

0

Ich habe keine Gruppenklausel.

Ich glaube, Sie all clube Tabellenfelder zu Ihrer Gruppe Klausel hinzugefügt, so dass Ihre Gruppenklausel seiner Natur verloren und hat kompiliert nicht zu SQL, während Sie einige von ihnen in Ihrer ersten SQL-Abfrage hinzugefügt.

bearbeiten

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); 

Hoffe, es hilft.

+0

Hallo Ryan, wenn ich versuche, einige clube Felder in der groupby zu entfernen, verliere ich diese, Feld in anonymous in der Auswahl unten. Beispiel Wenn ich den t.clube.Nome entferne, verliere ich den Nome = g.Key.Nome, – jolynice

+0

Hallo jolynice, welche Felder möchten Sie gruppieren? Ich werde auf sie aktualisieren meine Antwort hängt – Ryan

+0

Hallo Ryan, vielen Dank für Ihre Hilfe, in der Tat Ich brauche nur diese Felder t.clube.Nome, t.clube.NomeNaCamisola, t.clube.NumNaCamisola, t.clube. Posicao, t.clube.Situacao ,, – jolynice

Verwandte Themen