Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何比较两个datatable列的值_C#_Asp.net_Linq_Datatable - Fatal编程技术网

C# 如何比较两个datatable列的值

C# 如何比较两个datatable列的值,c#,asp.net,linq,datatable,C#,Asp.net,Linq,Datatable,我想验证两个datatable的quantity列。下面给出的是示例数据表。我想取dtItems中每个项目的数量之和,并与dtMasterItem中相同项目的数量进行比较。如果dtItems数量大于dtMasterItem数量,则我想显示消息,如itemcode的可用数量为1000 dtMasterItem dtItems ItemCode Quantity A 2000 A 1000 A 500 B

我想验证两个datatable的quantity列。下面给出的是示例数据表。我想取dtItems中每个项目的数量之和,并与dtMasterItem中相同项目的数量进行比较。如果dtItems数量大于dtMasterItem数量,则我想显示消息,如itemcode的可用数量为1000

dtMasterItem

dtItems

ItemCode      Quantity

   A           2000
   A           1000
   A           500
   B           3000  
   B           2000  
   C           6000 

根据我的逻辑,如果我们验证上表数据,输出将类似于可用数量为3000的一个

你的问题不是很清楚,但根据我从中了解的,这应该为你做

        foreach (DataRow rowMasterItems in dtMasterItem.Rows)
        {
            int lintSumOfItems = 0;
            foreach (DataRow rowItems in dtItems.Rows)
            {
                if (rowMasterItems["ItemCode"].ToString().Equals(rowItems["ItemCode"].ToString()))
                {
                    lintSumOfItems += Convert.ToInt16(rowItems["Quantity"]);
                }
            }
            if (Convert.ToInt16(rowMasterItems["Quantity"]) >= lintSumOfItems)
                MessageBox.Show("OK");
            else
                MessageBox.Show("Available quantity is " + Convert.ToInt16(rowMasterItems["Quantity"]) + " for itemcode: " + rowMasterItems["ItemCode"].ToString());
        }

你的问题不是很清楚,但根据我从中了解到的情况,这应该对你有用

        foreach (DataRow rowMasterItems in dtMasterItem.Rows)
        {
            int lintSumOfItems = 0;
            foreach (DataRow rowItems in dtItems.Rows)
            {
                if (rowMasterItems["ItemCode"].ToString().Equals(rowItems["ItemCode"].ToString()))
                {
                    lintSumOfItems += Convert.ToInt16(rowItems["Quantity"]);
                }
            }
            if (Convert.ToInt16(rowMasterItems["Quantity"]) >= lintSumOfItems)
                MessageBox.Show("OK");
            else
                MessageBox.Show("Available quantity is " + Convert.ToInt16(rowMasterItems["Quantity"]) + " for itemcode: " + rowMasterItems["ItemCode"].ToString());
        }

请尝试此代码,它对我有效:

        DataTable dt1 = new DataTable();
        DataTable dt2 = new DataTable();
        dt1.Columns.Add("ItemCode", typeof(string));
        dt1.Columns.Add("Quantity", typeof(int));
        dt2.Columns.Add("ItemCode", typeof(string));
        dt2.Columns.Add("Quantity", typeof(int));
        dt1.Rows.Add("A", 3000);
        dt1.Rows.Add("B", 5000);
        dt1.Rows.Add("C", 6000);
        dt2.Rows.Add("A", 2000);
        dt2.Rows.Add("A", 1000);
        dt2.Rows.Add("A", 500);
        dt2.Rows.Add("B", 3000);
        dt2.Rows.Add("B", 2000);
        dt2.Rows.Add("c", 6000);

        var query = from row in dt2.AsEnumerable()
                    group row by row.Field<string>("ItemCode") into grp
                    select new
                    {
                        ItemCode = grp.Key,
                        Quantity = grp.Sum(r => r.Field<int>("Quantity"))
                    };
        int i = 0;
        foreach (var item in query)
        {
            if (Convert.ToInt32(item.Quantity) > Convert.ToInt32(dt1.Rows[i]["Quantity"]))
            {
                Console.WriteLine("Available quantity is "+ dt1.Rows[i]["Quantity"].ToString()+ " for "+item.ItemCode);
            }
            i++;
        }

        Console.Read();
DataTable dt1=newdatatable();
DataTable dt2=新的DataTable();
dt1.Columns.Add(“ItemCode”,typeof(string));
dt1.列。添加(“数量”,类型(int));
dt2.Columns.Add(“ItemCode”,typeof(string));
dt2.列。添加(“数量”,类型(int));
dt1.行。添加(“A”,3000);
dt1.行。添加(“B”,5000);
dt1.行。添加(“C”,6000);
dt2.行。添加(“A”,2000年);
dt2.行。添加(“A”,1000);
dt2.行。添加(“A”,500);
dt2.行。添加(“B”,3000);
dt2.行。添加(“B”,2000年);
dt2.行。添加(“c”,6000);
var query=来自dt2.AsEnumerable()中的行
逐行将字段(“ItemCode”)分组到grp中
选择新的
{
ItemCode=grp.Key,
数量=grp.总和(r=>r.字段(“数量”))
};
int i=0;
foreach(查询中的var项)
{
if(Convert.ToInt32(item.Quantity)>Convert.ToInt32(dt1.Rows[i][“Quantity”]))
{
Console.WriteLine(“可用数量为”+dt1.Rows[i][“数量”].ToString()+”表示“+item.ItemCode”);
}
i++;
}
Console.Read();

试试这个代码,它对我有用:

        DataTable dt1 = new DataTable();
        DataTable dt2 = new DataTable();
        dt1.Columns.Add("ItemCode", typeof(string));
        dt1.Columns.Add("Quantity", typeof(int));
        dt2.Columns.Add("ItemCode", typeof(string));
        dt2.Columns.Add("Quantity", typeof(int));
        dt1.Rows.Add("A", 3000);
        dt1.Rows.Add("B", 5000);
        dt1.Rows.Add("C", 6000);
        dt2.Rows.Add("A", 2000);
        dt2.Rows.Add("A", 1000);
        dt2.Rows.Add("A", 500);
        dt2.Rows.Add("B", 3000);
        dt2.Rows.Add("B", 2000);
        dt2.Rows.Add("c", 6000);

        var query = from row in dt2.AsEnumerable()
                    group row by row.Field<string>("ItemCode") into grp
                    select new
                    {
                        ItemCode = grp.Key,
                        Quantity = grp.Sum(r => r.Field<int>("Quantity"))
                    };
        int i = 0;
        foreach (var item in query)
        {
            if (Convert.ToInt32(item.Quantity) > Convert.ToInt32(dt1.Rows[i]["Quantity"]))
            {
                Console.WriteLine("Available quantity is "+ dt1.Rows[i]["Quantity"].ToString()+ " for "+item.ItemCode);
            }
            i++;
        }

        Console.Read();
DataTable dt1=newdatatable();
DataTable dt2=新的DataTable();
dt1.Columns.Add(“ItemCode”,typeof(string));
dt1.列。添加(“数量”,类型(int));
dt2.Columns.Add(“ItemCode”,typeof(string));
dt2.列。添加(“数量”,类型(int));
dt1.行。添加(“A”,3000);
dt1.行。添加(“B”,5000);
dt1.行。添加(“C”,6000);
dt2.行。添加(“A”,2000年);
dt2.行。添加(“A”,1000);
dt2.行。添加(“A”,500);
dt2.行。添加(“B”,3000);
dt2.行。添加(“B”,2000年);
dt2.行。添加(“c”,6000);
var query=来自dt2.AsEnumerable()中的行
逐行将字段(“ItemCode”)分组到grp中
选择新的
{
ItemCode=grp.Key,
数量=grp.总和(r=>r.字段(“数量”))
};
int i=0;
foreach(查询中的var项)
{
if(Convert.ToInt32(item.Quantity)>Convert.ToInt32(dt1.Rows[i][“Quantity”]))
{
Console.WriteLine(“可用数量为”+dt1.Rows[i][“数量”].ToString()+”表示“+item.ItemCode”);
}
i++;
}
Console.Read();

尝试使用linq查询

    DataTable dt1 = new DataTable("dtMasterItem");
    dt1.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ItemCode" });
    dt1.Columns.Add(new DataColumn() { DataType = typeof(int), ColumnName = "Quantity" });

    DataTable dt2 = new DataTable("dtItems");
    dt2.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ItemCode" });
    dt2.Columns.Add(new DataColumn() { DataType = typeof(int), ColumnName = "Quantity" });

    dt1.Rows.Add("A", 3000);
    dt1.Rows.Add("B", 5000);
    dt1.Rows.Add("C", 6000);

    dt2.Rows.Add("A", 2000);
    dt2.Rows.Add("A", 1000);
    dt2.Rows.Add("A", 500);
    dt2.Rows.Add("B", 3000);
    dt2.Rows.Add("B", 2000);
    dt2.Rows.Add("C", 6000);

   var result = (from k in
                  (from x in dt2.AsEnumerable()
                           group x by x["ItemCode"] into entryGroup
                           select new
                           {
                               ItemCode = entryGroup.Key,
                               Quantity = entryGroup.Sum(i => Convert.ToInt32(i["Quantity"]))
                           })
                      join y in dt1.AsEnumerable() on k.ItemCode equals y["ItemCode"] into DataGroup
                      from item in DataGroup.DefaultIfEmpty()
                      select new
                      {
                          ItemCode = k.ItemCode,
                          Q1 = k.Quantity,
                          Q2 = item["Quantity"],
                          Remarks = Convert.ToInt32(item["Quantity"]) < k.Quantity ? "Available quantity is " + k.Quantity + " for " + k.ItemCode : null
                      }).AsEnumerable().Where(i => i.Remarks != null);
DataTable dt1=新数据表(“dtMasterItem”);
添加(newdatacolumn(){DataType=typeof(string),ColumnName=“ItemCode”});
添加(newdatacolumn(){DataType=typeof(int),ColumnName=“Quantity”});
DataTable dt2=新的DataTable(“dtItems”);
添加(newdatacolumn(){DataType=typeof(string),ColumnName=“ItemCode”});
Add(newdatacolumn(){DataType=typeof(int),ColumnName=“Quantity”});
dt1.行。添加(“A”,3000);
dt1.行。添加(“B”,5000);
dt1.行。添加(“C”,6000);
dt2.行。添加(“A”,2000年);
dt2.行。添加(“A”,1000);
dt2.行。添加(“A”,500);
dt2.行。添加(“B”,3000);
dt2.行。添加(“B”,2000年);
dt2.行。添加(“C”,6000);
var result=(从k开始)
(从dt2.AsEnumerable()中的x开始)
按x[“项目代码”]将x分组到entryGroup中
选择新的
{
ItemCode=entryGroup.Key,
Quantity=entryGroup.Sum(i=>Convert.ToInt32(i[“Quantity”]))
})
将k.ItemCode=y[“ItemCode”]上的dt1.AsEnumerable()中的y连接到数据组中
来自DataGroup.DefaultIfEmpty()中的项
选择新的
{
ItemCode=k.ItemCode,
Q1=k.数量,
Q2=项目[“数量”],
备注=Convert.ToInt32(项目[“数量”])i.备注!=null);
输出:


尝试使用linq查询

    DataTable dt1 = new DataTable("dtMasterItem");
    dt1.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ItemCode" });
    dt1.Columns.Add(new DataColumn() { DataType = typeof(int), ColumnName = "Quantity" });

    DataTable dt2 = new DataTable("dtItems");
    dt2.Columns.Add(new DataColumn() { DataType = typeof(string), ColumnName = "ItemCode" });
    dt2.Columns.Add(new DataColumn() { DataType = typeof(int), ColumnName = "Quantity" });

    dt1.Rows.Add("A", 3000);
    dt1.Rows.Add("B", 5000);
    dt1.Rows.Add("C", 6000);

    dt2.Rows.Add("A", 2000);
    dt2.Rows.Add("A", 1000);
    dt2.Rows.Add("A", 500);
    dt2.Rows.Add("B", 3000);
    dt2.Rows.Add("B", 2000);
    dt2.Rows.Add("C", 6000);

   var result = (from k in
                  (from x in dt2.AsEnumerable()
                           group x by x["ItemCode"] into entryGroup
                           select new
                           {
                               ItemCode = entryGroup.Key,
                               Quantity = entryGroup.Sum(i => Convert.ToInt32(i["Quantity"]))
                           })
                      join y in dt1.AsEnumerable() on k.ItemCode equals y["ItemCode"] into DataGroup
                      from item in DataGroup.DefaultIfEmpty()
                      select new
                      {
                          ItemCode = k.ItemCode,
                          Q1 = k.Quantity,
                          Q2 = item["Quantity"],
                          Remarks = Convert.ToInt32(item["Quantity"]) < k.Quantity ? "Available quantity is " + k.Quantity + " for " + k.ItemCode : null
                      }).AsEnumerable().Where(i => i.Remarks != null);
DataTable dt1=新数据表(“dtMasterItem”);
添加(newdatacolumn(){DataType=typeof(string),ColumnName=“ItemCode”});
添加(newdatacolumn(){DataType=typeof(int),ColumnName=“Quantity”});
DataTable dt2=新的DataTable(“dtItems”);
添加(newdatacolumn(){DataType=typeof(string),ColumnName=“ItemCode”});
Add(newdatacolumn(){DataType=typeof(int),ColumnName=“Quantity”});
dt1.行。添加(“A”,3000);
dt1.行。添加(“B”,5000);
dt1.行。添加(“C”,6000);
dt2.行。添加(“A”,2000年);
dt2.行。添加(“A”,1000);
dt2.行。添加(“A”,500);
dt2.行。添加(“B”,3000);
dt2.世界其他地区