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

文字列をまたはに解析する必要があります。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(既にこれらのテーブルに参加しているため)DateDateTime.

それとは別に

  1. なぜあなたはDataViewまったく必要なのですか?ToTable常に新しい を作成しますDataTable。なんで全部使わないLinq-To-DataSetの?DataViewフィルタリングに を使用したことがあると思いますが、Enumerable.Where代わりに使用してください。それはより一貫性があり、より効率的で、より読みやすいでしょう。
  2. なぜ列promotionValueは文字列なのですか? 数値型として格納する必要があります。
于 2013-01-24T11:18:55.687 に答える
0

ここでは、別のテーブルの 2 つの列の合計を求める単純なクエリを実行しています。

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 に答える