Как показать сгруппированные в Chart с помощью Linq - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть таблица

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 для 2018 Показать 800 и т. д.
Поэтому я хочу видеть в Годах диаграммы как x-axisобщий доход в y-axis

Что я делаю, когда пишу так?

 public DisplayForm()
    {
        InitializeComponent(); 
        chart1.Series.Clear();
        var series = chart1.Series.Add("Series1");
        series.XValueMember = "Year";
        series.YValueMembers = "TotalIncome";
        ShowSoldProduct(); 
    }

  private void ShowSoldProduct()
    {
        using (HotelEntities db = new HotelEntities())
        {
            try
            {
                var result = (from pr in db.Transactions
                              select pr).ToArray();

                chart1.DataSource = result
                    .GroupBy(x => x.TransactionDate.Value.Year)
                    .Select(g => new
                    {
                        Year = g.Key,

                        TotalIncome = g.Sum(y => y.TotalPrice)
                    })
                    .ToArray();

                chart1.DataSource = result;
                chart1.DataBind();
                chart1.Show();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


        }
    }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Попробуйте следующее:

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();
        }
    }
}
0 голосов
/ 12 февраля 2019

Вы должны сгруппировать по 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...