首页 > 解决方案 > 如何从某些行求和

问题描述

我正在尝试显示在特定日期售出的商品数量。销售明细数据看这个

销售编号 详细信息 ID 项目 数量 销售日期
0 0 面条 1 17/02/2021
0 1 汉堡包 1 17/02/2021
0 2 沙拉 1 17/02/2021
1 3 薯条 1 18/02/2021
2 4 面条 1 18/02/2021
2 5 面条 1 18/02/2021
3 6 薯条 1 19/02/2021
4 7 面条 1 19/02/2021
5 8 面条 1 20/02/2021

它是从其他表中加入的,基本上如上所示。
最终商品销售表将搜索 [userInputDate1] 和 [userInputDate2] 之间的条目并简化它。
这是用户输入 17/02/21 和 18/02/21 时应该显示的内容。

项目 已售商品
面条 3
汉堡包 1
沙拉 1
沙拉 1

我试过 linq 查询

SELECT        Items, SUM(Quantity) AS TQuantity
FROM            PosView
WHERE        (salesDate > @userInputDate1) AND (salesDate < @userInputDate2)
GROUP BY Items

但它不会显示在datagridview中。

如果我找不到更简单的解决方案,我将使用 for /foreach 以编程方式计算 datagridview 中的项目

标签: c#sql-serverlinqdatagridview

解决方案


请参阅以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Globalization;
namespace ConsoleApplication181
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("SalesID", typeof(int));
            dt.Columns.Add("DetailID", typeof(int));
            dt.Columns.Add("Items", typeof(string));
            dt.Columns.Add("Quantity", typeof(int));
            dt.Columns.Add("salesDate", typeof(DateTime));

            dt.Rows.Add(new object[] {0, 0, "noodles",1, DateTime.ParseExact("17/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {0, 1, "burger",1, DateTime.ParseExact("17/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {0, 2, "salad",1, DateTime.ParseExact("17/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {1, 3, "fries",1, DateTime.ParseExact("18/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {2, 4, "noodles",1, DateTime.ParseExact("18/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {2, 5, "noodles",1, DateTime.ParseExact("18/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {3, 6, "fries",1, DateTime.ParseExact("19/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {4, 7, "noodles",1, DateTime.ParseExact("19/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});
            dt.Rows.Add(new object[] {5, 8, "noodles",1, DateTime.ParseExact("20/02/2021", "dd/mm/yyyy", CultureInfo.InvariantCulture)});

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("Items", typeof(string));
            dt2.Columns.Add("ItemsSold", typeof(int));

            var groups = dt.AsEnumerable().GroupBy(x => x.Field<string>("Items")).ToList();

            foreach (var group in groups)
            {
                dt2.Rows.Add(new object[] {group.Key, group.Count()});
            }

        }
 
    }
 
}

推荐阅读