LINQでのWhere条件の記述方法について
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/9/1 15:11:39
> SekyuView に種類のフィールドを加えた場合の
[種類]は、ヘッダー部と明細部のどちらに属しているのでしょうか?
> 'この場合ビルドエラーが発生します
Select すると、使用可能なメンバーが Select した項目だけになります。
Select 後に Where したいなら、
Select 種類 = r!種類, 伝番 = r!伝票番号, 日付 = r!日付, 金額 = r!今回請求額 _
Where 種類 = wSHURUI
のように、あらかじめ 種類も“射影”しておく必要があります。
> Where r.種類 = wSHURUI _
「r.種類」という記述は NG です。
DataRowView に [種類]というプロパティはありませんので。
この場合は『r.種類』ではなく、『r("種類")』と記述してみて下さい。
他のフィールド(日付や伝票番号など)もそうなっていますよね。
もちろん、『r.Item("種類")』や『r!種類』でも可能です。
> 条件の記述として正しいのかどうか不安です。
[種類]がヘッダー部に属しているのであれば、
Select 前に Where しておいても OK です。
というよりも、先に記述しておいた方が良いでしょうね。
ちなみに
Group 今回請求額 By 日付 Into 合計額 = Sum()
は
Group By 日付 Into 合計額 = Sum(今回請求額)
とも書けます。
[種類]は、ヘッダー部と明細部のどちらに属しているのでしょうか?
> 'この場合ビルドエラーが発生します
Select すると、使用可能なメンバーが Select した項目だけになります。
Select 後に Where したいなら、
Select 種類 = r!種類, 伝番 = r!伝票番号, 日付 = r!日付, 金額 = r!今回請求額 _
Where 種類 = wSHURUI
のように、あらかじめ 種類も“射影”しておく必要があります。
> Where r.種類 = wSHURUI _
「r.種類」という記述は NG です。
DataRowView に [種類]というプロパティはありませんので。
この場合は『r.種類』ではなく、『r("種類")』と記述してみて下さい。
他のフィールド(日付や伝票番号など)もそうなっていますよね。
もちろん、『r.Item("種類")』や『r!種類』でも可能です。
> 条件の記述として正しいのかどうか不安です。
[種類]がヘッダー部に属しているのであれば、
Select 前に Where しておいても OK です。
というよりも、先に記述しておいた方が良いでしょうね。
ちなみに
Group 今回請求額 By 日付 Into 合計額 = Sum()
は
Group By 日付 Into 合計額 = Sum(今回請求額)
とも書けます。
投稿者 河童  (社会人)
投稿日時
2010/9/2 18:43:45
こんばんは。
魔界の仮面弁士さん、お返事ありがとうございます。
> [種類]は、ヘッダー部と明細部のどちらに属しているのでしょうか?
[種類]は、ヘッダー部にあります。
条件の記述はSelectの前にします。
>「r.種類」という記述は NG です。
>DataRowView に [種類]というプロパティはありませんので。
わかりました。
他のフィールドを参考にして変更します。
とてもわかり易いご説明ありがとうございました。
不安が解消されました。
魔界の仮面弁士さん、お返事ありがとうございます。
> [種類]は、ヘッダー部と明細部のどちらに属しているのでしょうか?
[種類]は、ヘッダー部にあります。
条件の記述はSelectの前にします。
>「r.種類」という記述は NG です。
>DataRowView に [種類]というプロパティはありませんので。
わかりました。
他のフィールドを参考にして変更します。
とてもわかり易いご説明ありがとうございました。
不安が解消されました。
追加で質問があります。
SekyuView に種類のフィールドを加えた場合の
Where条件の記述の仕方を教えて下さい。
比較する値は
変数wSHURUIに代入されています。
Where条件追加(2)を試すとビルドエラーは発生しないのですが、
条件の記述として正しいのかどうか不安です。
Where条件で比較する値が変数に代入されているときの
記述の仕方を教えて下さい。
よろしくお願いします。
◆SekyuView
伝票番号 日付 商品名 今回請求額 種類
245804 27 A 840 保険
245804 27 B 840 保険
245804 27 C 840 保険
245805 27 A 1260 保険
245805 27 D 1260 保険
245806 27 E 3000 自費
◆希望の結果
'wSHURUIが保険の場合
27日 2100円
◆Where条件追加(1)
'この場合ビルドエラーが発生します
Dim q = From r As DataRowView In SekyuView Select _
伝票番号 = CInt(r("伝票番号")), 日付 = CInt(r("日付")), 今回請求額 = CInt(r("今回請求額")) _
Where r.種類 = wSHURUI _
Distinct Group 今回請求額 By 日付 Into 今回請求額 = Sum()
◆Where条件追加(2)
'Selectの前にWhere条件を追加
Dim q = From r As DataRowView In SekyuView Where r.Item("種類") = wHOKEN Select _
伝票番号 = CInt(r("伝票番号")), 日付 = CInt(r("日付")), 今回請求額 = CInt(r("今回請求額")) _
Distinct Group 今回請求額 By 日付 Into 今回請求額 = Sum()