Il se refroidit comme le champ CauseID représente une clé étrangère? Si c'est le cas, vous pouvez mapper une association dans votre modèle d'entité, de sorte que cause.Orders
est une propriété à laquelle vous pouvez accéder. Côté note, vous pouvez également renommer les entités/propriétés, ils n'ont pas à faire correspondre les noms des tables afin que vous puissiez vous débarrasser des underscores laids! Cela ressemblerait alors à ceci:
var result = from c in context.Of_Causes
select new {cause, cause.Orders.Sum(o => o.Contribution}
Vous obtiendrez quelques avantages de le faire (si vous le pouvez), comme un modèle plus propre et plus efficace des requêtes SQL généré.
Si vous ne pouvez pas utiliser une clé étrangère, je joindrais manuellement les tables, ce qui devrait améliorer les performances.
Je crois que cela ressemble à ça, mais ma traduction de VB à C# peut être douteux, voici le C#:
var context = new ModelContainer();
var result = from c in context.Of_Cause
join o in context.Of_Orders on c.Id equals o.CauseID into g
select new {Cause = c, Total = g.Sum(o => o.Contribution)};
Et voici l'original VB dans le cas où ma traduction est désactivé!
Dim result = From cause As Of_Cause In context.Of_Cause
Group Join order As Of_Orders In context.Of_Orders On order.CauseID Equals cause.Id Into total = Sum(order.Contribution)
Select New With {.Cause = cause, .Total = total}
Salut, c'est une explication cool. Pouvez-vous m'aider avec plus de choses à chaque fois que nous faisons "sélectionnez nouveau", il crée un type anonyme. Je veux créer une liste de type Cause et veux stocker le total dans une propriété de l'objet Cause comment dois-je faire cela? –
Oui, pas de problème, mais pourriez-vous le poser comme une nouvelle question? Ne peut pas facilement faire beaucoup dans une boîte de commentaires autre que le commentaire car il n'y a pas de code, etc. – RichardW1001