2016-06-08 6 views
0

Wie kann ich do this mit Entity Framework?Entity Framework 6: Hinzufügen einer Zusammenfassungszeile mit Summen

Ich arbeite mit Entity Framework 6 und SQL Server 2014

Ich brauche eine Gruppe von Abfrage zu tun. Das ist einfach, aber jetzt brauche ich einen Spezialfall. Hier ein Beispiel, um zu klären, was ich brauche.

Nehmen wir an, ich muss nach FARBE gruppieren, ABER ich möchte auch einen weiteren Datensatz mit dem Aggregat auf allen Zeilen erstellen. So

, wenn ich eine groupby & Zahl Abfrage machen, werden die result'd:

Output 

    COLOR COUNT 
    red  2 
    green 2 
    yellow 1 
    allColor 5 

in SQL es möglich ist, wie Sie in der oben gepostet Link sehen können. Wie kann ich mein Ziel mit Entity Framework erreichen?

In meinem realen Fall habe ich das versucht, aber die letzte Zeile ist im Visual Studio rot hinterlegt.

var tempErogs = erogs.GroupBy(x => 0).Select(g => new { Modalita = g.Key, Importo = g.Sum(x => x.IMPORTO), Litri = g.Sum(x => x.LITRI), N_erogs = g.Count() }).ToList(); 
erogsGBvenduto.Add(new { Modalita = tempErogs[0].Modalita, Importo = tempErogs[0].Importo, Litri = tempErogs[0].Litri, N_erogs = tempErogs[0].N_erogs }); 
+0

die gleiche Abfrage in einer gespeicherten Prozedur Setzen Sie die bereits die Daten in das gewünschte Format zurückkehrt und dass die gespeicherte Prozedur von EF nennen. Sie können die gespeicherte Prozedur als eine Funktion importieren, die von Ihrer DAL-Schicht aufgerufen werden kann. – RBT

+0

Ich nehme an, Sie können union all (Concat in LINQ) verwenden, aber es wäre besser, die gesamte Zeile per Hand anzuhängen (entweder in der Benutzeroberfläche oder nur zum resultierenden Dataset), weil Sie alle Daten bereits im Speicher haben. – Evk

+0

Suchen Sie das Update, ich habe meinen Code hinzugefügt –

Antwort

-1

Versuchen Sie, diese

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication99 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dt1 = new DataTable(); 
      dt1.Columns.Add("ID", typeof(int)); 
      dt1.Columns.Add("COLOR", typeof(string)); 
      dt1.Columns.Add("NAME", typeof(string)); 

      dt1.Rows.Add(new object[] { 1, "red", "aaa"}); 
      dt1.Rows.Add(new object[] { 2, "red", "vvv"}); 
      dt1.Rows.Add(new object[] { 3, "green", "fff"}); 
      dt1.Rows.Add(new object[] { 4, "green", "ggg"}); 
      dt1.Rows.Add(new object[] { 5, "yellow", "eee"}); 

      DataTable dt2 = new DataTable(); 
      dt2.Columns.Add("COLOR", typeof(string)); 
      dt2.Columns.Add("COUNT", typeof(int)); 

      var groups = dt1.AsEnumerable().GroupBy(x => x.Field<string>("COLOR")); 
      foreach(var group in groups) 
      { 
       dt2.Rows.Add(new object[] {group.Key, group.Count()}); 
      } 
      dt2.Rows.Add(new object[] { "allColor", dt1.Rows.Count }); 
     } 
    } 
} 
+0

Sie verwenden ADO.NET Datatables. Die Frage bezieht sich auf Entity Framework – llouk

+0

Ich nehme an, dass die Ergebnisse der Abfrage in C# DataTable eingefügt werden würde. Das Posting ist sowohl mit C# als auch mit Entity Framework gekennzeichnet. – jdweng

Verwandte Themen