如何使用Linq在图表中按分组显示

时间:2019-02-12 13:27:51

标签: c# winforms charts

我有桌子

Transactions {
TransactionId
TransactionDate
TotalIncome
}

我想显示totalIncome年中的TransactionDate年 可以说我的数据库中有以下数据

 TransactionId  TransactionDate TotalIncome
 1              2017-10-12       230
 2              2017-11-10       400
 3              2018-01-03       300
 4              2018-10-05       500    
 5              2019-01-06       600
 6              2019-02-10       200

所以我想在图表中以charttype样条显示2017,显示630,因为230+400 = 630的{​​{1}}显示2018,依此类推上。
因此,我想在“图表年”中将其视为800,将总收入视为x-axis

这样写时我在做什么错?

y-axis

2 个答案:

答案 0 :(得分:3)

您应按TransactionDate.Year分组。我不确定Entity Framework(或您使用的任何ORM)是否支持此功能,但您最好对内存结果进行分组。像这样:

var result = (from pr in db.Transactions
              select pr).ToArray();

chart1.DataSource = result
    .GroupBy(x => x.TransactionDate.Year)
    .Select(g => new
    {
        Year = g.Key
        TotalIncome = g.Sum(y => y.TotalIncome)
    })
    .ToArray();

答案 1 :(得分:0)

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.Data;


namespace ConsoleApplication100
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("TransactionId", typeof(int));
            dt.Columns.Add("TransactionDate", typeof(DateTime));
            dt.Columns.Add("TotalIncome", typeof(int));

            dt.Rows.Add(new object[] { 1, DateTime.Parse("2017-10-12"), 230 });
            dt.Rows.Add(new object[] { 2, DateTime.Parse("2017-11-10"), 400 });
            dt.Rows.Add(new object[] { 3, DateTime.Parse("2018-01-03"), 300 });
            dt.Rows.Add(new object[] { 4, DateTime.Parse("2018-10-05"), 500 });
            dt.Rows.Add(new object[] { 5, DateTime.Parse("2019-01-06"), 600 });
            dt.Rows.Add(new object[] { 6, DateTime.Parse("2019-02-10"), 200 });

            var results = dt.AsEnumerable()
                .GroupBy(x => x.Field<DateTime>("TransactionDate").Year)
                .Select(x => new { year = x.Key, total = x.Sum(y => y.Field<int>("TotalIncome")) })
                .ToList();
        }
    }
}