Linq。查询数据集总和

时间:2018-12-02 15:23:56

标签: linq

我是linq的初学者。 我想在linq中编写此查询。 选择SUM(importo),anno From( 从[Archivio]。[dbo]。[AAA]中选择anno,Importo。 联盟 从[Archivio]。[dbo]。[BBB])中选择anno,importo 按Anno分组,按anno分组。

我写了这个:

DataTable Tab_AAA = DS_AAA.Tables[0];
                DataTable Tab_BBB = DS_BBB.Tables[0];

IEnumerable<DataRow> query =
(from A in DS_AAA.AsEnumerable()
select A).Union(from B in DS_BBB.AsEnumerable()
select B) 

现在我无法输入总和和分组依据。 谢谢大家

1 个答案:

答案 0 :(得分:0)

您正在使用的对象必须是这样的

public class AnnoImporto
    {
        private int _anno;
        private double _importo;
        private string _altro;


        public AnnoImporto(int aAnno, double aImp, string aAltro)
        {
            _anno = aAnno;
            _importo = aImp;
            _altro = aAltro;
        }

        public int Anno
        {
            get { return _anno; }
            set { _anno = value; }
        }

        public double Importo
        {
            get { return _importo; }
            set { _importo = value; }
        }

        public string Altro
        {
            get { return _altro; }
            set { _altro = value; }
        }
    }

请确保您拥有年份和金额,并考虑将“ altro”作为通用的最终其他字段。我建立了两个AnnoImporto对象列表,但是以下代码甚至可以在不同对象的列表上使用(当然,正如我刚才所说的,只有年份和数量...)

List<AnnoImporto> aaa = new List<AnnoImporto>();
            List<AnnoImporto> bbb = new List<AnnoImporto>();

            aaa.Add(new AnnoImporto(2015, 10,"blabla"));
            aaa.Add(new AnnoImporto(2014, 20, "blabla"));
            aaa.Add(new AnnoImporto(2013, 15, "blabla"));
            aaa.Add(new AnnoImporto(2012, 5, "blabla"));
            aaa.Add(new AnnoImporto(2011, 40, "blabla"));

            bbb.Add(new AnnoImporto(2011, 50, "blabla"));
            bbb.Add(new AnnoImporto(2013, 20, "blabla"));
            bbb.Add(new AnnoImporto(2015, 15, "blabla"));

            var aaa_mod = from a in aaa
                          select new
                          {
                              Anno = a.Anno,
                              Importo = a.Importo
                          };

            var bbb_mod = from b in bbb
                          select new
                          {
                              Anno = b.Anno,
                              Importo = b.Importo
                          };

            var unione = aaa_mod.Union(bbb_mod);

            Console.WriteLine("controlliamo la nuova lista:");

            foreach (var p in unione)
            {
                Console.WriteLine($"{p.Anno}, {p.Importo}");
            }

            var somme = from p in unione
                        orderby p.Anno
                        group p.Importo by p.Anno into q
                        select new
                        {
                            Anno = q.Key,
                            ImportoTotale = q.Sum()
                        };

            Console.WriteLine("controlliamo le somme:");

            foreach (var p in somme)
            {
                Console.WriteLine($"{p.Anno}, {p.ImportoTotale}");
            }

我一步步地执行您的查询:首先,我在aaa中选择了bbb,然后在bbb中仅选择了需要的字段,然后对结果进行并集,然后进行了检查。然后我进行了分组,以按年计算总和。