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 });
}
}
}
我如何 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 });
}
}
}