C# 我怎样才能得到列“的总和?”;“件”;在数据表中?

C# 我怎样才能得到列“的总和?”;“件”;在数据表中?,c#,datatable,sum,datarow,datacolumn,C#,Datatable,Sum,Datarow,Datacolumn,如何获得数据表中“pieces”列的总和?假设我有下表。如何计算article=“milk”和artno=“15”的“总计”件数 my new DataTable的结果应该是: Columns: article artno pieces Rows: 1 bread 11 2 2 water 12 1 3 apple 13 2 4 mil

如何获得数据表中“pieces”列的总和?假设我有下表。如何计算article=“milk”和artno=“15”的“总计”件数

my new DataTable的结果应该是:

Columns:   article     artno    pieces
Rows:
1          bread       11       2
2          water       12       1
3          apple       13       2
4          milk        15       2
5          milk        16       5
我的代码:

foreach (DataRow foundDataRow in foundRows1)
{
    int i = 0;
    foreach (DataRow dataRow in foundRows2)
    {
        if (object.Equals(dataRow.ItemArray[0], foundDataRow.ItemArray[0])
            && object.Equals(dataRow.ItemArray[3], foundDataRow.ItemArray[3]))
        {
            i = i + Convert.ToInt16(dataRow.ItemArray[4]);
        }
    }
    Debug.Print(i.ToString());
}

抱歉,我是新的数据库开发人员,我的英语说得不太好。

在.NET 4 windows应用程序中,这段代码在sum变量中给出了9:

    DataTable dt = new DataTable("aaa");

    dt.Columns.Add("pieces", typeof(int));

    dt.Rows.Add(new object[] { 1 });
    dt.Rows.Add(new object[] { 3 });
    dt.Rows.Add(new object[] { 5 });

    var sum = dt.Compute("SUM(pieces)", string.Empty);

您可以像这样使用
AsEnumerable
方法:

var results = dataTable.AsEnumerable()
                       .Where(row => row.Field<string>("article") == "milk" && 
                                     row.Field<int>("artno") == 15)
                       .Select(row => row.Field<int>("pieces"))
                       .Sum();
var results=dataTable.AsEnumerable()
其中(row=>row.Field(“article”)==“milk”&&
行字段(“artno”)==15)
.Select(行=>row.Field(“片段”))
.Sum();
使用该方法,您可以执行以下操作:

int sum = (int)table.Compute("Sum(pieces)", "article = 'milk' AND artno='15'");

使用Michael的建议,少走一步:

var results = dataTable.AsEnumerable()
                       .Where(row => (row.Field<string>("article ") == "milk") &&
                                     (row.Field<int>("artno") == 15))
                       .Sum(row => row.Field<int>("pieces"));
var results=dataTable.AsEnumerable()
.其中(行=>(行字段(“文章”)==“牛奶”)&&
(行字段(“artno”)==15)
.Sum(行=>行字段(“条”);

(这是使用)

Thx进行应答。但“article”和“artno”这两个栏目的数据甚至不一样。每次都有其他数据。不,这不是1:1的关系,因为牛奶可以是artno=15或更高16@McSteel我想在我的评论和回答更正之间有一点延迟。。。现在好了吗?dt.Compute(“SUM(pieces)”,string.Empty)我能用它来求所有片段的和吗?应该还能用吗?自从.NET 1.x以来,计算函数就在那里了。你在问什么?你能试试我的代码,看看它是如何工作的,然后在你的表上调用Compute并检查结果吗?我想这回答了你的问题。我的datatable没有一个AsEnumerable()函数?!您可能需要添加对System.Data的引用。
var results = dataTable.AsEnumerable()
                       .Where(row => (row.Field<string>("article ") == "milk") &&
                                     (row.Field<int>("artno") == 15))
                       .Sum(row => row.Field<int>("pieces"));