使用下面提到的查询,我得到一个名为的列的所有值 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");
答案 0 :(得分:4)
您需要parse字符串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
(因为您已加入这些表格)或Date
DateTime
属性。
除此之外
DataView
? ToTable
始终会创建一个新的DataTable
。为什么不为所有人使用Linq-To-DataSet
?我假设您已使用DataView
进行过滤,请改用Enumerable.Where
。这将更加一致,更有效,更具可读性。promotionValue
是一个字符串?您应该将其存储为数字类型。答案 1 :(得分:0)
这里我对不同表的两列的总和进行简单查询。
选择 res.Date ,res.Cost ,res.Cost + res_con.Cost 来自[ExpenseMst] res 内部联接[ExpenseMst_2] res_con on res_con.ID = res.ID
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
我希望它有用.. :)
答案 2 :(得分:-2)
你可以做到
int sum = 0;
foreach(int match in matched)
{
sum = sum + match;
}