使用下面提到的查询,我得到了一个名为促销价值 .我想获取*匹配*的所有值的总和
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");
将字符串解析为int
或decimal
:
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
(因为您已经加入了这些表)或 DateTime
的Date
属性。
除此之外
- 为什么需要
DataView
?ToTable
总是创建一个新的DataTable
。您为什么不对所有人使用Linq-To-DataSet
?我假设您已使用DataView
进行过滤,请改用Enumerable.Where
。这将更加一致、更有效和更具可读性。 - 为什么列
promotionValue
字符串?应将其存储为数值类型。
我对不同表的两列的总和进行了简单的查询。
选择 res.日期 ,res.成本 ,res.成本+res_con。成本 来自 [ExpenseMst] res 内部联接 [ExpenseMst_2] res_con 在 res_con.ID =res.ID
日期 | 成本1 | 成本 2| 总计
2014-03-04 | 5200 |5200 |10400
2014-03-04 | 5012 |5012 |10024
2014-03-22 |100 |100 |200
2014-03-13 |25 |25 |50
2014-02-22 | 120 |120 |240
我希望它有用..:)
你可以做
int sum = 0;
foreach(int match in matched)
{
sum = sum + match;
}