数据表中的SUM 2列

时间:2016-05-10 12:33:29

标签: c# datatable

我有这个数据表:

    RadkyData.Columns.Add("ČísloDokladuDodavatele", typeof(string));
    RadkyData.Columns.Add("Množství", typeof(string));
    RadkyData.Columns.Add("NákupníCena", typeof(string));
    RadkyData.Columns.Add("PřepočtováJednotka", typeof(string));
    RadkyData.Columns.Add("Přepočtovýkoeficient", typeof(string));
    RadkyData.Columns.Add("DoporučenáCena", typeof(string));
    RadkyData.Columns.Add("KódZboží", typeof(string));
    RadkyData.Columns.Add("Ean", typeof(string));
    RadkyData.Columns.Add("Název", typeof(string));
    RadkyData.Columns.Add("DPH", typeof(string));
    RadkyData.Columns.Add("OS1", typeof(string));
    RadkyData.Columns.Add("OS2", typeof(string));
    RadkyData.Columns.Add("OS3", typeof(string));
    RadkyData.Columns.Add("OS4", typeof(string));
    RadkyData.Columns.Add("OS5", typeof(string));
    RadkyData.Columns.Add("US1", typeof(string));
    RadkyData.Columns.Add("US2", typeof(string));
    RadkyData.Columns.Add("US3", typeof(string));
    RadkyData.Columns.Add("Oddělení", typeof(string));
    RadkyData.Columns.Add("MěrnáJednotka", typeof(string));
    RadkyData.Columns.Add("Barva", typeof(string));
    RadkyData.Columns.Add("Velikost", typeof(string));
    RadkyData.Columns.Add("Délka", typeof(string));
    RadkyData.Columns.Add("Šířka", typeof(string));
    RadkyData.Columns.Add("TypDokladu(PNS)", typeof(string));
    RadkyData.Columns.Add("Datum OD", typeof(string));
    RadkyData.Columns.Add("Datum DO", typeof(string));
    RadkyData.Columns.Add("Značka", typeof(string));
    RadkyData.Columns.Add("Sezona", typeof(string));
    RadkyData.Columns.Add("Výrobní č.", typeof(string));
    RadkyData.Columns.Add("Popis_Rozpis", typeof(string));
    RadkyData.Columns.Add("Sufix EAN", typeof(string));

我需要SUM列“Množství”和列“NákupníCena”,其中列是:KódZboží,Ean,Velikost在行中是相同的。

这是我的代码:

var res = RadkyData.AsEnumerable()
                    .Select(r=>new 
                    {
                        c1 = r.Field<string>("ČísloDokladuDodavatele"),
                        c2 = r.Field<string>("Množství"),
                        c3 = r.Field<string>("NákupníCena"),
                        c4 = r.Field<string>("PřepočtováJednotka"),
                        c5 = r.Field<string>("Přepočtovýkoeficient"),
                        c6 = r.Field<string>("DoporučenáCena"),
                        c7 = r.Field<string>("KódZboží"),
                        c8 = r.Field<string>("Ean"),
                        c9 = r.Field<string>("Název"),
                        c10 = r.Field<string>("DPH"),
                        c11 = r.Field<string>("OS1"),
                        c12 = r.Field<string>("OS2"),
                        c13 = r.Field<string>("OS3"),
                        c14 = r.Field<string>("OS4"),
                        c15 = r.Field<string>("OS5"),
                        c16 = r.Field<string>("US1"),
                        c17 = r.Field<string>("US2"),
                        c18 = r.Field<string>("US3"),
                        c19 = r.Field<string>("Oddělení"),
                        c20 = r.Field<string>("MěrnáJednotka"),
                        c21 = r.Field<string>("Barva"),
                        c22 = r.Field<string>("Velikost"),
                        c23 = r.Field<string>("Délka"),
                        c24 = r.Field<string>("Šířka"),
                        c25 = r.Field<string>("TypDokladu(PNS)"),
                        c26 = r.Field<string>("Datum OD"),
                        c27 = r.Field<string>("Datum DO"),
                        c28 = r.Field<string>("Značka"),
                        c29 = r.Field<string>("Sezona"),
                        c30 = r.Field<string>("Výrobní č."),
                        c31 = r.Field<string>("Popis_Rozpis"),
                        c32 = r.Field<string>("Sufix EAN")
                    })
                    .GroupBy(g => new { g.c1, g.c4, g.c5, g.c6, g.c7, g.c8, g.c9, g.c10, g.c11, g.c12, g.c13, g.c14, g.c15, g.c16, g.c17, g.c18, g.c19, g.c20, g.c21, g.c22, g.c23, g.c24, g.c25, g.c26, g.c27, g.c28, g.c29, g.c30, g.c31, g.c32 })
                    .Select(x => new { 
                        col1 = x.Key.c1,
                        col2 = x.Sum(s => double.Parse(s.c2, System.Globalization.CultureInfo.InvariantCulture)),
                        col3 = x.Sum(s => double.Parse(s.c3, System.Globalization.CultureInfo.InvariantCulture)),
                        col4 = x.Key.c4,
                        col5 = x.Key.c5,
                        col6 = x.Key.c6,
                        col7 = x.Key.c7,
                        col8 = x.Key.c8,
                        col9 = x.Key.c9,
                        col10 = x.Key.c10,
                        col11 = x.Key.c11,
                        col12 = x.Key.c12,
                        col13 = x.Key.c13,
                        col14 = x.Key.c14,
                        col15 = x.Key.c15,
                        col16 = x.Key.c16,
                        col17 = x.Key.c17,
                        col18 = x.Key.c18,
                        col19 = x.Key.c19,
                        col20 = x.Key.c20,
                        col21 = x.Key.c21,
                        col22 = x.Key.c22,
                        col23 = x.Key.c23,
                        col24 = x.Key.c24,
                        col25 = x.Key.c25,
                        col26 = x.Key.c26,
                        col27 = x.Key.c27,
                        col28 = x.Key.c28,
                        col29 = x.Key.c29,
                        col30 = x.Key.c30,
                        col31 = x.Key.c31, 
                        col32 = x.Key.c32  
                    });

但是这段代码没有分组和汇总行......请问您有什么想法吗?

示例:我有2个相同的行,有不同的列“Množství”和Nákupnícena“。从这2行我想做一行,其中是SUM”Množství“和Nákupnícena”。

代码的简短变体:

var res = RadkyData.AsEnumerable()
                    .Select(r=>new 
                    {
                        c1 = r.Field<string>("ČísloDokladuDodavatele"),
                        c2 = r.Field<string>("Množství"),
                        c3 = r.Field<string>("NákupníCena"),                        
                    })
                    .GroupBy(g => new { g.c1 })
                    .Select(x => new { 
                        col1 = x.Key.c1,
                        col2 = x.Sum(s => double.Parse(s.c2, System.Globalization.CultureInfo.InvariantCulture)),
                        col3 = x.Sum(s => double.Parse(s.c3, System.Globalization.CultureInfo.InvariantCulture)),
                    });

1 个答案:

答案 0 :(得分:0)

我创建了一张桌子: enter image description here

Hier是您尝试使用Linq实现的SQL查询,结果如下: enter image description here

Hier是我用来获取SUM的Linq代码:

var result = ctx.Set<RadkyData>()
            .GroupBy(x => new { x.c1, x.c2, x.c3, x.c4, x.c5, x.c6 })
            .Select(x => new
                            {
                                col1 = x.Key.c1,
                                col_Mnozstvi = x.Sum(y => y.Množství),
                                col_NakupniCena = x.Sum(y => y.NákupníCena),
                                col2 = x.Key.c2,
                                col3 = x.Key.c3,
                                col4 = x.Key.c4,
                                col5 = x.Key.c5,
                                col6 = x.Key.c6
                            });

看,除了“Množství”和“Nákupnícena”之外的所有领域都有相同的价值。

Hier是Linq的结果 - 它与SQL查询的结果相同: enter image description here

您写道:

  

我需要SUM列“Množství”和列“NákupníCena”,其中列是:KódZboží,Ean,Velikost在行中是相同的。

但是您按所有字段进行分组,其值可能不同!您必须仅按预期值相同的行进行分组。在你的情况下只有“KódZboží”,“Ean”和“Velikost”。在这种情况下,您将获得正确的SUM。