投稿者 魔界の仮面弁士  (社会人) 投稿日時 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