LINQ总和一列并插入到另一个表C#

时间:2015-10-13 07:02:39

标签: c# sql .net sql-server linq

我有两张桌子,因为下面的一张我想知道怎么总结"卡路里"列基于表1中的名称,然后将值插入表2

table1(PK->ID(int),Name(nvarchar),amount(int),calorie(int))
table2(pk->ID(int),name(nvarchar),totalcalorie(int))

+-------+--------+----------+--------------+
| int   |  name  | amount   |    calorie   |
+-------+--------+----------+--------------+
|     1 |    a   |       10 |     20       |
|     2 |    b   |        5 |     20       |
|     2 |    b   |       10 |     10       |
|     1 |    a   |       10 |     10       |
|     2 |    b   |       15 |     35       |
|     3 |    c   |       20 |     15       |
+-------+--------+----------+--------------+
像这样的东西是我的第一个表现在想象table2的同一个表 这次只有:

1-------a--------30
2-------b--------65
3-------c--------15

这有可能吗?到目前为止我所写的并且不起作用的是:

DataClasses1DataContext db = new DataClasses1DataContext();
        var q = from row in db.table1
                group row by new { row.name }
                    into grp
                    select new
                    {
                        grp.Key.name,
                        sum = grp.Sum(row => row.calorie)
                    };
        db.SubmitChanges();

2 个答案:

答案 0 :(得分:0)

现在您只是选择数据。您需要插入块,如下所示:

var q = (from row in db.table1
        group row by new { row.id, row.name } into grp
        select new
        {
            grp.Key.id,
            grp.Key.name,
            sum = grp.Sum(s => s.calorie)
        }).ToList();

foreach(var item in q)
{
    var e = new db.table2Entity
    {
        id = item.id,
        name = item.name,
        totalcalorie = item.sum
    };
    db.Table2.AddObject(e);      
}

db.SaveChanges();

答案 1 :(得分:0)

我认为你在db.SubmitChanges()wright之后没有看到你的数据库结果? Linq查询应该可以正常工作但是提交没有看到更改,因为table2没有变化。您只需选择数据并将其从table1分组。请调试并查看q变量中的内容。