LINQでのWhere条件の記述方法について への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 河童  (社会人) 投稿日時 2010/9/2 18:43:45
こんばんは。
魔界の仮面弁士さん、お返事ありがとうございます。

> [種類]は、ヘッダー部と明細部のどちらに属しているのでしょうか?
[種類]は、ヘッダー部にあります。
条件の記述はSelectの前にします。

>「r.種類」という記述は NG です。
>DataRowView に [種類]というプロパティはありませんので。
わかりました。
他のフィールドを参考にして変更します。

とてもわかり易いご説明ありがとうございました。
不安が解消されました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 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(今回請求額)
とも書けます。
投稿者 河童  (社会人) 投稿日時 2010/9/1 11:46:20
こんにちは。

追加で質問があります。

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()