2

私は次の表を持っています

+-------+--------+----------+
| catid |  name  | quantity |
+-------+--------+----------+
|     1 | table  |       10 |
|     2 | chair  |        5 |
|     2 | chair  |       10 |
|     1 | table  |       10 |
|     2 | chair  |       15 |
|     3 | pencil |       20 |
+-------+--------+----------+

LINQを使用して、同じ名前のcatidを持つ行の数量を合計し、これを同じデータテーブルに保存したい

したがって、結果はこのテーブルになります

+-------+--------+----------+
| catid |  name  | quantity |
+-------+--------+----------+
|     1 | table  |       20 |
|     2 | chair  |       30 |
|     3 | pencil |       20 |
+-------+--------+----------+
4

3 に答える 3

4
var result = (from row in YourTable
             group row by new {row.catid, row.name}
             into grp
                    select new
                    {
                        grp.Key.catid,
                        grp.Key.name,
                        Quantity = grp.Sum(row => row.Quantity)
                    }).ToList();

編集: VB タグが付けられていることに気付きました。そのために残念。さて、次のようになるはずです:

Dim result = From row In YourTable
    Group By Key = New With {row.catid, row.name} Into Group
Select New With 
{ 
.Catid = Key.catid, 
.Name =  Key.Name, 
.Quantity =  Group.Sum(Function(x) x.quantity)
}
于 2012-10-14T17:09:59.703 に答える
1

Artur Udod の答えは問題ありません (そして追加の機能があります) が、単純な LINQ の答えは次のとおりです。

Dim result = From row In YourTable
             Group By row.catid, row.name Into Group
             Select catid, name, quantity = Sum(From g In group Select g.quantity)

(未テスト)

于 2012-10-15T09:22:54.353 に答える
0

私の場合、マークの回答は次の形式で成功しています。

Dim result = From row In YourTable
         Group By row.catid, row.name Into Group
         Select catid, name, quantity = (From g In group Select g.quantity).Sum
于 2014-02-04T11:50:40.923 に答える