使用 LINQ 的特定列的总和

  • 本文关键字:LINQ 使用 c# linq
  • 更新时间 :
  • 英文 :


使用下面提到的查询,我得到了一个名为促销价值 .我想获取*匹配*的所有值的总和

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");
您需要

将字符串解析为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字符串?应将其存储为数值类型。
在这里,

我对不同表的两列的总和进行了简单的查询。

选择 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;
}

相关内容

  • 没有找到相关文章

最新更新