2011-10-26 41 views
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 

了我新的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应用程序

回答

6

使用DataTable.Compute方法,你可以这样做:

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

这是个好主意! Thx – McSteel

+0

这个功能帮助我很好! THX – McSteel

0

,这个代码片段给出了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); 
+0

我们使用.NET 3.5框架。 – McSteel

+0

dt.Compute(“SUM(pieces)”,string.Empty)我可以使用所有块的总和 – McSteel

+0

应该仍然可以工作Compute函数在那里,因为.NET 1.x –

2

你可以使用AsEnumerable方法,像这样:

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

我的数据表没有AsEnumerable()函数?! – McSteel

+0

您可能需要添加对System.Data的引用。 –

1

使用迈克尔的建议1升ESS步:

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

+0

Thx回答。但“文章”和“artno”这两列甚至不是相同的数据。每次都有其他数据。 – McSteel

+0

@McSteel,好的,我已经修复了相应的代码。 –

+0

不,这不是1对1的关系,因为牛奶可以是artno = 15或16 – McSteel

相关问题