2

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

Columns:   article     artno    pieces
Rows:
1          milk        15       1
2          water       12       1
3          apple       13       2
4          milk        15       1
5          milk        16       1
6          bread       11       2
7          milk        16       4

我的新数据表的结果应该是这样的:

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());
}

对不起,但我是新的数据库开发人员,我的英语口语不太好。

4

4 回答 4

6

使用该DataTable.Compute方法,您可以执行以下操作:

int sum = (int)table.Compute("Sum(pieces)", "article = 'milk' AND artno='15'");
于 2011-10-26T11:58:02.297 回答
3

你可以使用这样的AsEnumerable方法:

var results = dataTable.AsEnumerable()
                       .Where(row => row.Field<string>("article") == "milk" && 
                                     row.Field<int>("artno") == 15)
                       .Select(row => row.Field<int>("pieces"))
                       .Sum();
于 2011-10-26T11:55:16.190 回答
1

使用迈克尔的建议少 1 步:

var results = dataTable.AsEnumerable()
                       .Where(row => (row.Field<string>("article ") == "milk") &&
                                     (row.Field<int>("artno") == 15))
                       .Sum(row => row.Field<int>("pieces"));

(这是使用Linq to DataSet

于 2011-10-26T11:59:16.743 回答
0

在 .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);
于 2011-10-26T11:52:13.770 回答