2016-09-07 9 views
0

Ich habe eine Abfrage in C# und ich muss nach dieser Abfrage für c.Same_invoice gruppieren und den Spaltenpreis in der gruppierten Zeile summieren.Gruppieren nach und Summe In LINQ-Abfrage mit Join

Ich weiß, wie Gruppe und Summe zu tun, aber ich weiß nicht die Lösung für meinen Fall, mit einer Verknüpfung und eine große Menge an Daten.

Der eigentliche Code ist:

var query = from c in snd.external_invoices.OrderByDescending(x => x.date) 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice 
      select new{ 
       c.idexternal_invoices, 
       c.businessname, 
       o.number, 
       c.message, 
       c.price, 
       c.date, 
       c.iduser 
      }; 

Dank an alle

+0

Joins sind ein sehr, sehr starken Geruch. Die Beziehung zwischen den Entitäten sollte in ihrer Zuordnung angegeben werden. Das ORM (z. B. EF) generiert bei Bedarf nur die richtigen Joins * und lädt nur die endgültigen Daten. In diesem Fall müssen Sie nicht einmal gruppieren, da Sie alle Stammobjekte zurückgeben. Eine einzelne 'c.Invoices.Sum (inv => inv.SomeField)' würde reichen –

+0

Ich verstehe, was Sie sagen, aber ich arbeite für eine Beratung, wo der Kunde ein Projekt mit Entity Framework hat, aber beschlossen, nicht hinzuzufügen Zuordnungen zur Datenbank. Ich bin nicht berechtigt, die db oder das Mapping zu ändern. Ich kann nur mit dem arbeiten, was ich habe. Danke für Ihre Antwort –

+0

Dann sagen Sie ihnen, sie müssen ihren Fehler beheben. In jedem Fall ist es unmöglich zu helfen, ohne zu wissen, was Sie gruppieren oder summieren möchten. Wie würden Sie dieselbe Aussage in SQL schreiben? Die LINQ-Anweisung wäre äquivalent. Und der Kunde hätte immer noch einen sehr hässlichen Bug –

Antwort

2

Sie so etwas wie verwenden:

var query = from c in snd.external_invoices.OrderByDescending(x => x.date) 
      join o in snd.invoices on c.idexternal_invoices equals o.id_external_invoice into grouped 
      select new{ 
       Invoice =grouped.key, Price = grouped.Sum(x => x.Price)}; 
+0

Ich habe versucht, Ihren Code, aber C# erkennt nicht gruppierten Punkt Wert –

+0

Was meinst du mit gruppierten Punkt Wert? –

+0

Entschuldigung, in der Auswahl neu hat meine Linq-Anweisung keinen Wert in Grouped für den zweiten Teil von Join. Ich habe nur den ersten Teil –