Entity Framework, Linq, Jointure interne, Group By, Order By
J'ai une Requête SQL
select Firma.Name as companyName,
Taetigkeit.Taetigkeit as skillName,
SUM(Zeit) as time
from Zeiterfassung
inner join Firma On ZEiterfassung.FirmenID = Firma.ID
inner join Taetigkeit on Zeiterfassung.TaetigkeitID = Taetigkeit.ID
group by Taetigkeit, Firma.Name
order by Firma.Name
Et que vous voulez "traduire" à linq. Voici ce que j'ai essayé:
var query = db.Zeiterfassung
.Where(x => x.Firma.ID == x.FirmenID && x.TaetigkeitID == x.Taetigkeit.ID)
.GroupBy(x => x.Taetigkeit.Taetigkeit1)
.Select(x => new Evaluation() { skillName = x.Key, time = x.Sum(y => y.Zeit), //skillName = x.Sum(x => x.Zeit), })
.OrderBy(x => x.skillName);
Je ne sais pas qui à résoudre ce avec des jointures et le groupe car tout le temps quand je fais un groupBy je ne peux pas accéder aux autres membres.
- Post ce que vous avez essayé jusqu'à présent.
- var query = db.Zeiterfassung.Où(x => x.Firma.ID == x.FirmenID && x.TaetigkeitID == x.Taetigkeit.ID).GroupBy(x => x.Taetigkeit.Taetigkeit1).Sélectionnez(x => nouvelle Évaluation() { skillName = x.Clé, le temps = x.Sum(y => y.Zeit), //skillName = x.Sum(x => x.Zeit), }).OrderBy(x => x.skillName);
Vous devez vous connecter pour publier un commentaire.
À partir des données que vous avez fournies, je pense que la requête devrait ressembler à
Ou avec les propriétés de navigation:
Select
comment il l'utilise z.Zeit (la propriété) z.Taetigkeit.Taetigkeit1 (propriété de navigation; OP réalisés dans la syntaxe de la requête parJOIN t in db.Taetigkeit
), et z.Firma.Nom (propriété de navigation; OP réalisés dans la syntaxe de la requête parJOIN f in db.Firma
). Je pense que les propriétés de navigation sont créés automatiquement par EF si il y a relation de Clé Étrangère. Mais que faire si il n'y a pas de relation de Clé Étrangère; peut-on encore utiliser les propriétés de navigation? Devons-nous créer explicitement en premier?