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");
4

3 回答 3

4

您需要将字符串解析intor 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

除此之外

  1. 为什么你需要DataView呢?ToTable总是创造一个新的DataTable. 为什么不全用Linq-To-DataSet?我假设您已使用DataViewfor 过滤,请Enumerable.Where改用。这将更一致、更高效、更易读。
  2. 为什么该列promotionValue是一个字符串?您应该将其存储为数字类型。
于 2013-01-24T11:18:55.687 回答
0

在这里,我对不同表的两列的总和进行简单查询。

SELECT res.Date ,res.Cost , res.Cost+res_con.Cost FROM [ExpenseMst] res 内连接 [ExpenseMst_2] res_con on 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

我希望它有用.. :)

于 2014-05-15T08:42:36.927 回答
-2

你可以做

int sum = 0;
foreach(int match in matched)
{
  sum = sum + match;
}
于 2013-01-24T11:17:34.997 回答