Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
LINQのjoinを条件で分岐できるでしょうか?
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30289#CommentId83074
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2017/9/21 10:45:48
> いくつかのデータテーブルあるいはコレクションを、Joinで結合して、データを取得したいと考えています。
LINQ 操作において、Where や Order By は、列挙データの
順番や件数を変化させますが、データ型そのものは変化しません。
しかし Join 操作や Select は、LINQ 結果のデータ型まで異なってくるはずです。
列挙した結果は、最終的にどのように取り出して利用したいのでしょうか?
具体例が無いのでイメージが沸かないのですが、ひとまず、
SQL でいうところの「INNER JOIN」ではなく、「OUTER JOIN」の意味でよいのなら、
ひとまずすべての条件で繋いでおき、列挙時に FlagC を確認するという手もあります。
http://windyrings.jugem.jp/?eid=836
https://ameblo.jp/komasu/entry-10930942751.html
http://qiita.com/taiga_takahari/items/a5d4cdb74661253704f0
> If FlagC﹦true then
> Dim Query2 = From q In Query
> Join C In LIST_C On q.ID Equals C.ID
> End If
> としています。
等価演算子の等号が
"=" ChrW(&H003D) 'EQUALS SIGN'
"=" ChrW(&HFF1D) 'FULLWIDTH EQUALS SIGN'
ではなく、
"﹦" ChrW(&HFE66) 'SMALL EQUALS SIGN'
になってしまっていますよ。
それはさておき、提示頂いたコードですと、End If を抜けた後では、
Query2 変数にアクセスすることができなくなってしまいます。
また、最初の Query では Select 句が省略されていますから、
「Join C In LIST_C On q.ID Equals C.ID」のように書くこともできないはずです。
「Join C In LIST_C On q.A.ID Equals C.ID」もしくは
「Join C In LIST_C On q.B.ID Equals C.ID」ではありませんか?
(案1) If FlagC Then の外側で Dim Query2 As IEnumerable(Of 型) を宣言して使う。
※この場合、匿名型は使えません。
(案2) 先に紹介した URL のように、外部結合相当の問い合わせにしてしまう。
(案3) LINQ ではなく、DataSet の DataRelation 、Expression Column による集計を用いる。
https://msdn.microsoft.com/ja-jp/library/dbwcse3d.aspx