Entity Framework 6:添加带有总计的摘要行

Entity Framework 6: Add a summary row with totals

我如何 do this 和 Entity Framework?

我正在使用 Entity Framework 6 和 SQL Server 2014。

我需要按查询进行分组。这很简单,但现在我需要一个特例。这里有一个例子来阐明我的需要。

Table

ID  COLOR    NAME  
1    red    aaa
2    red    vvv
3    green  fff
4    green  ggg 
5    yellow  eee

假设我必须按颜色分组,但我还想再创建一个包含所有行聚合的记录。

所以,如果我进行 groupby&count 查询,结果将是:

  Output 

  COLOR    COUNT
  red      2
  green    2
  yellow   1
  allColor 5

在sql中是可以的,正如你在上面的帖子link中看到的那样。 Entity Framework 如何实现我的目标?

在我的真实案例中,我尝试了这个,但最后一行在 visual studio 中是红色底衬的。

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

试试这个

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