使用 LINQ 计算特定列的总和

3
使用以下查询,我可以获取名为promotionValue的列的所有值。 我想要获取*匹配*的所有值的总和。
var matched = from table1 in dvtempPropertyRoomRatePromotion.ToTable().AsEnumerable()
              join table2 in dvPropertyRooms.ToTable().AsEnumerable() on
              table1.Field<DateTime>("RateDate") equals table2.Field<DateTime>("RateDate")
            where table1.Field<DateTime>("RateDate") == table2.Field<DateTime>("RateDate")
               select table1.Field<string>("promotionValue");

我尝试使用matched.sum(p=>p.Field<string>("promotionValue")),但是没有成功。 - palak mehta
3个回答

4
您需要将字符串解析intdecimal:
var matched = from r1 in dvtempPropertyRoomRatePromotion.ToTable().AsEnumerable()
              join r2 in dvPropertyRooms.ToTable().AsEnumerable() 
              on r1.Field<DateTime>("RateDate").Date equals r2.Field<DateTime>("RateDate").Date
              select decimal.Parse(r1.Field<string>("promotionValue"));
decimal sum = matched.Sum();

请注意,我还更改了一些其他内容,例如冗余的where(因为您已经连接了这些表)或DateTimeDate属性。

除此之外

  1. 你为什么需要DataViewToTable总是创建一个新的DataTable。为什么不全部使用Linq-To-DataSet?我假设您使用DataView进行过滤,请改用Enumerable.Where。这将更一致、更高效和更易读。
  2. 为什么列promotionValue是字符串?您应该将其存储为数字类型。

0

这里我提供了一个简单的查询,用于计算不同表的两列之和。

SELECT res.Date ,res.Cost , res.Cost+res_con.Cost FROM [ExpenseMst] res inner join [ExpenseMst_2] res_con on res_con.ID =res.ID

日期 | 费用1 | 费用2 | 总计

2014年3月4日 | 5200 | 5200 | 10400

2014年3月4日 | 5012 | 5012 | 10024

2014年3月22日 | 100 | 100 | 200

2014年3月13日 | 25 | 25 | 50

2014年2月22日 | 120 | 120 | 240

希望对您有所帮助.. :)


1
我认为他正在寻找一列中所有值的总和,而不是两列的总和。 - jwg

-2

你可以做到

int sum = 0;
foreach(int match in matched)
{
  sum = sum + match;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接