質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

LINQ to Dataset

LINQ to Datasetは、ADO.NET のコンポーネントのひとつです。DataSetオブジェクトにキャッシュされたデータへのクエリを、よりシンプルかつ高速にします。クエリを記述する際、プログラミング言語そのものを使うことができるため、クエリ操作が簡単になるという利点があります。

Q&A

解決済

4回答

15795閲覧

至急お願いします。LINQ 複数テーブルjoinと複合条件とwhere

DENQ

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

LINQ

LINQとはLanguage INtegrated Queryの略で、「統合言語クエリ」という意味です。C#やVisual Basicといった言語のコード内に記述することができるクエリです。

LINQ to Dataset

LINQ to Datasetは、ADO.NET のコンポーネントのひとつです。DataSetオブジェクトにキャッシュされたデータへのクエリを、よりシンプルかつ高速にします。クエリを記述する際、プログラミング言語そのものを使うことができるため、クエリ操作が簡単になるという利点があります。

0グッド

0クリップ

投稿2016/10/25 05:32

編集2016/10/25 07:08

###前提・実現したいこと
LINQで複数のテーブルをjoin
いくつかのテーブルはwhere句もつけたいです。
少し複雑ですが、作業が止まってしまっているため、ご教授よろしくお願いします。

###発生している問題・エラーメッセージ

join句のいずれかの式が正しくありません'GroupJoin'の呼び出しで肩を推論できませんでした。

というエラーが出ております。

###該当のソースコード

C#

1 2Table1 3[NoFlg], 4[RTth], 5[LTth] 6 7Table2 8[ID], 9[START_DATE], 10[TOUROKU_NO], 11[BCD], 12[END_DATE] 13 14 15Table3 16[ID], 17[DATE], 18[NO], 19[DSP_NO], 20[UR], 21[UL], 22[DR], 23[DL], 24[TOUROKU_1], 25[TOUROKU_2], 26[TOUROKU_3], 27[TOUROKU_4] 28 29table4 30[TOUROKU_NO], 31[NAME_1], 32[NAME_2], 33[NAME_3], 34[NAME_4], 35[NAME_5], 36[NAME_6], 37[NAME_7], 38[NAME_8], 39 40table5 41[TOUROKU_NO], 42[NAME_9], 43[NAME_10], 44[NAME_11], 45[NAME_12], 46[NAME_13], 47[NAME_14], 48[NAME_15], 49[NAME_16], 50 51 52 53 54 55 56 57 var q = from em in Table3 58 join thUR in Table1 on em.UR equals thUR.RTth 59 join thUL in Table1 on em.UL equals thUL.LTth 60 join thDr in Table1 on em.DR equals thDr.RTth 61 join thDl in Table1 on em.DL equals thDl.LTth 62 join HK in table4 on em.TOUROKU_1 equals HK.TOUROKU_NO 63 //この下のjoin句で対象のエラーが発生 64 join TB2 in Table2 on new { a = em.ID, b = HK.NAME_1} equals new { a = TB2.ID, b = TB2.TOUROKU_NO} into g 65 where em.DATE >= g.START_DATE & em.DATE< g.END_DATE 66 select new { 67 em.ID, 68 em.DATE, 69 em.NO, 70 em.DSP_NO, 71 BI = (thUR.RTth == "0" ? "" : "R" + thUR.RTth) + 72 (thUL.LTth == "0" ? "" : "L" + thUL.LTth) + 73 (thDr.RTth == "0" ? "" : "r" + thDr.RTth) + 74 (thDl.LTth == "0" ? "" : "l" + thDl.LTth), 75 NAME_ID = (HK.NAME_1 == "0" ? "" : from c in g select c.BCD) 76 }; 77 78 79 80 81SQLで書くとこうなります。 82 83 SELECT 84 [ID], 85 [DATE], 86 [NO], 87 [DSP_NO], 88 (CASE v1.[RTth] WHEN '0' THEN '' ELSE 'R'+v1.[RTth] END) + 89 (CASE v2.[LTth] WHEN '0' THEN '' ELSE 'L'+v2.[LTth] END) + 90 (CASE v3.[RTth] WHEN '0' THEN '' ELSE 'r'+v3.[RTth] END) + 91 (CASE v4.[LTth] WHEN '0' THEN '' ELSE 'l'+v4.[LTth] END) AS [BI], 92 ISNULL((CASE c1.[NAME_1] WHEN '0' THEN '' ELSE b1.[BCD] END) + 93 (CASE c1.[NAME_2] WHEN '0' THEN '' ELSE b2.[BCD] END) + 94 (CASE c1.[NAME_3] WHEN '0' THEN '' ELSE b3.[BCD] END) + 95 (CASE c1.[NAME_4] WHEN '0' THEN '' ELSE b4.[BCD] END) + 96 (CASE c1.[NAME_5] WHEN '0' THEN '' ELSE b5.[BCD] END) + 97 (CASE c1.[NAME_6] WHEN '0' THEN '' ELSE b6.[BCD] END) + 98 (CASE c1.[NAME_7] WHEN '0' THEN '' ELSE b7.[BCD] END) + 99 (CASE c1.[NAME_8] WHEN '0' THEN '' ELSE b8.[BCD] END) + 100 (CASE c2.[NAME_9] WHEN '0' THEN '' ELSE b9.[BCD] END) + 101 (CASE c2.[NAME_10] WHEN '0' THEN '' ELSE b10.[BCD] END) + 102 (CASE c2.[NAME_11] WHEN '0' THEN '' ELSE b11.[BCD] END) + 103 (CASE c2.[NAME_12] WHEN '0' THEN '' ELSE b12.[BCD] END) + 104 (CASE c2.[NAME_13] WHEN '0' THEN '' ELSE b13.[BCD] END) + 105 (CASE c2.[NAME_14] WHEN '0' THEN '' ELSE b14.[BCD] END) + 106 (CASE c2.[NAME_15] WHEN '0' THEN '' ELSE b15.[BCD] END) + 107 (CASE c2.[NAME_16] WHEN '0' THEN '' ELSE b16.[BCD] END) , '') AS [NAME_ID] 108 FROM Table3 AS k1 109 LEFT JOIN Table1 AS v1 ON k1.[UR] = v1.[NoFlg] 110 LEFT JOIN Table1 AS v2 ON k1.[UL] = v2.[NoFlg] 111 LEFT JOIN Table1 AS v3 ON k1.[DR] = v3.[NoFlg] 112 LEFT JOIN Table1 AS v4 ON k1.[DL] = v4.[NoFlg] 113 LEFT JOIN table4 AS c1 ON k1.[TOUROKU_1] = c1.[TOUROKU_NO] 114 LEFT JOIN Table2 AS b1 ON k1.[ID] = b1.[ID] AND c1.[NAME_1] = b1.[TOUROKU_NO] AND k1.[DATE] >= b1.[START_DATE] AND k1.[DATE] < b1.[END_DATE] 115 LEFT JOIN Table2 AS b2 ON k1.[ID] = b2.[ID] AND c1.[NAME_2] = b2.[TOUROKU_NO] AND k1.[DATE] >= b2.[START_DATE] AND k1.[DATE] < b2.[END_DATE] 116 LEFT JOIN Table2 AS b3 ON k1.[ID] = b3.[ID] AND c1.[NAME_3] = b3.[TOUROKU_NO] AND k1.[DATE] >= b3.[START_DATE] AND k1.[DATE] < b3.[END_DATE] 117 LEFT JOIN Table2 AS b4 ON k1.[ID] = b4.[ID] AND c1.[NAME_4] = b4.[TOUROKU_NO] AND k1.[DATE] >= b4.[START_DATE] AND k1.[DATE] < b4.[END_DATE] 118 LEFT JOIN Table2 AS b5 ON k1.[ID] = b5.[ID] AND c1.[NAME_5] = b5.[TOUROKU_NO] AND k1.[DATE] >= b5.[START_DATE] AND k1.[DATE] < b5.[END_DATE] 119 LEFT JOIN Table2 AS b6 ON k1.[ID] = b6.[ID] AND c1.[NAME_6] = b6.[TOUROKU_NO] AND k1.[DATE] >= b6.[START_DATE] AND k1.[DATE] < b6.[END_DATE] 120 LEFT JOIN Table2 AS b7 ON k1.[ID] = b7.[ID] AND c1.[NAME_7] = b7.[TOUROKU_NO] AND k1.[DATE] >= b7.[START_DATE] AND k1.[DATE] < b7.[END_DATE] 121 LEFT JOIN Table2 AS b8 ON k1.[ID] = b8.[ID] AND c1.[NAME_8] = b8.[TOUROKU_NO] AND k1.[DATE] >= b8.[START_DATE] AND k1.[DATE] < b8.[END_DATE] 122 LEFT JOIN table5 AS c2 ON k1.[TOUROKU_2] = c2.[TOUROKU_NO] 123 LEFT JOIN Table2 AS b9 ON k1.[ID] = b9.[ID] AND c2.[NAME_9] = b9.[TOUROKU_NO] AND k1.[DATE] >= b9.[START_DATE] AND k1.[DATE] < b9.[END_DATE] 124 LEFT JOIN Table2 AS b10 ON k1.[ID] = b10.[ID] AND c2.[NAME_10] = b10.[TOUROKU_NO] AND k1.[DATE] >= b10.[START_DATE] AND k1.[DATE] < b10.[END_DATE] 125 LEFT JOIN Table2 AS b11 ON k1.[ID] = b11.[ID] AND c2.[NAME_11] = b11.[TOUROKU_NO] AND k1.[DATE] >= b11.[START_DATE] AND k1.[DATE] < b11.[END_DATE] 126 LEFT JOIN Table2 AS b12 ON k1.[ID] = b12.[ID] AND c2.[NAME_12] = b12.[TOUROKU_NO] AND k1.[DATE] >= b12.[START_DATE] AND k1.[DATE] < b12.[END_DATE] 127 LEFT JOIN Table2 AS b13 ON k1.[ID] = b13.[ID] AND c2.[NAME_13] = b13.[TOUROKU_NO] AND k1.[DATE] >= b13.[START_DATE] AND k1.[DATE] < b13.[END_DATE] 128 LEFT JOIN Table2 AS b14 ON k1.[ID] = b14.[ID] AND c2.[NAME_14] = b14.[TOUROKU_NO] AND k1.[DATE] >= b14.[START_DATE] AND k1.[DATE] < b14.[END_DATE] 129 LEFT JOIN Table2 AS b15 ON k1.[ID] = b15.[ID] AND c2.[NAME_15] = b15.[TOUROKU_NO] AND k1.[DATE] >= b15.[START_DATE] AND k1.[DATE] < b15.[END_DATE] 130 LEFT JOIN Table2 AS b16 ON k1.[ID] = b16.[ID] AND c2.[NAME_16] = b16.[TOUROKU_NO] AND k1.[DATE] >= b16.[START_DATE] AND k1.[DATE] < b16.[END_DATE]

###試したこと
http://nyaffun.seesaa.net/category/12673984-1.html
こちらのサイトで紹介してある、二つのサイトを見ながらやりましたが、うまく行きませんでした。

最後のselect newの NAME_IDの三項演算子の部分でfrom c in g select c.BCDとしてますが、この式はビルドが通るか不安があります。
HK.NAME_1の値が0ならから文字それ以外ならtable2のBCDの値を取得したいです。

以上よろしくお願いします。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
.net freamwork 3.5
C#

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A.Ichi

2016/10/25 08:52

SQL文でのISNULLは多分typoミスですよね。JOINはできましたよ。
DENQ

2016/10/25 09:14

joinしたlinqの式を教えていただけないでしょうか?解答欄にお願いします。
guest

回答4

0

かなり複雑なので当てずっぽうになりますが、以下の箇所にもプロパティ名を追加してあげるとどうでしょう?

C#

1select new { 2 em.ID, // 「a = em.ID」, とかに修正(下のプロパティも同様に何か名前をつける) 3 em.DATE, 4 em.NO, 5 em.DSP_NO,

投稿2016/10/25 05:42

ishi9

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DENQ

2016/10/25 05:54

回答ありがとうございます。 試してみましたが、ダメみたいでした。
guest

0

自己解決

from em in Table3
join c1 in table4 on em.TOUROKU_1 equals c1.TOUROKU_NO
join c2 in table4 on em.TOUROKU_2 equals c2.TOUROKU_NO
select new
{
em.ID,
em.DATE,
em.NO,
em.DSP_NO,
BI = Table1.Where(v => em.UR == v.NoFlg && v.RTth != "0").Select(v => "R" + v.RTth).FirstOrDefault()
+ Table1.Where(v => em.UL == v.NoFlg && v.LTth != "0").Select(v => "R" + v.LTth).FirstOrDefault()
+ Table1.Where(v => em.DR == v.NoFlg && v.RTth != "0").Select(v => "r" + v.RTth).FirstOrDefault()
+ Table1.Where(v => em.DL == v.NoFlg && v.LTth != "0").Select(v => "l" + v.LTth).FirstOrDefault(),
NAME_ID = Table2.Where(v => em.ID == v.ID
&& c1.NAME_1 == v.TOUROKU_NO
&& v.TOUROKU_NO != "0"
&& em.DATE >= v.START_DATE
&& em.DATE < v.END_DATE)
.Select(v => v.BCD)
.FirstOrDefault() // b1
+ Table2.Where(v => em.ID == v.ID
&& c1.NAME_2 == v.TOUROKU_NO
&& v.TOUROKU_NO != "0"
&& em.DATE >= v.START_DATE
&& em.DATE < v.END_DATE)
.Select(v => v.BCD) // b2
.FirstOrDefault()
// TODO:b3-b16を追加する
}

投稿2016/10/25 10:19

DENQ

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

[hoge]外してSQLを実行しました。 もしかして例題のSQLは当然うまく行き、問題はプログラムが作成するSQLであれば、私の勘違いです。LINQの環境がないのでコードのデバグできなくてすみません。

sql

1 SELECT 2 k1.ID, 3 k1.DATE, 4 k1.NO, 5 DSP_NO, 6 (CASE v1.RTth WHEN '0' THEN '' ELSE 'R'+v1.RTth END) + 7 (CASE v2.LTth WHEN '0' THEN '' ELSE 'L'+v2.LTth END) + 8 (CASE v3.RTth WHEN '0' THEN '' ELSE 'r'+v3.RTth END) + 9 (CASE v4.LTth WHEN '0' THEN '' ELSE 'l'+v4.LTth END) AS BI, 10 IFNULL((CASE c1.NAME_1 WHEN '0' THEN '' ELSE b1.BCD END) + 11 (CASE c1.NAME_2 WHEN '0' THEN '' ELSE b2.BCD END) + 12 (CASE c1.NAME_3 WHEN '0' THEN '' ELSE b3.BCD END) + 13 (CASE c1.NAME_4 WHEN '0' THEN '' ELSE b4.BCD END) + 14 (CASE c1.NAME_5 WHEN '0' THEN '' ELSE b5.BCD END) + 15 (CASE c1.NAME_6 WHEN '0' THEN '' ELSE b6.BCD END) + 16 (CASE c1.NAME_7 WHEN '0' THEN '' ELSE b7.BCD END) + 17 (CASE c1.NAME_8 WHEN '0' THEN '' ELSE b8.BCD END) + 18 (CASE c2.NAME_9 WHEN '0' THEN '' ELSE b9.BCD END) + 19 (CASE c2.NAME_10 WHEN '0' THEN '' ELSE b10.BCD END) + 20 (CASE c2.NAME_11 WHEN '0' THEN '' ELSE b11.BCD END) + 21 (CASE c2.NAME_12 WHEN '0' THEN '' ELSE b12.BCD END) + 22 (CASE c2.NAME_13 WHEN '0' THEN '' ELSE b13.BCD END) + 23 (CASE c2.NAME_14 WHEN '0' THEN '' ELSE b14.BCD END) + 24 (CASE c2.NAME_15 WHEN '0' THEN '' ELSE b15.BCD END) + 25 (CASE c2.NAME_16 WHEN '0' THEN '' ELSE b16.BCD END) , '') AS NAME_ID 26 FROM Table3 AS k1 27 LEFT JOIN Table1 AS v1 ON k1.UR = v1.NoFlg 28 LEFT JOIN Table1 AS v2 ON k1.UL = v2.NoFlg 29 LEFT JOIN Table1 AS v3 ON k1.DR = v3.NoFlg 30 LEFT JOIN Table1 AS v4 ON k1.DL = v4.NoFlg 31 LEFT JOIN Table4 AS c1 ON k1.TOUROKU_1 = c1.TOUROKU_NO 32 LEFT JOIN Table2 AS b1 ON k1.ID = b1.ID AND c1.NAME_1 = b1.TOUROKU_NO AND k1.DATE >= b1.START_DATE AND k1.DATE < b1.END_DATE 33 LEFT JOIN Table2 AS b2 ON k1.ID = b2.ID AND c1.NAME_2 = b2.TOUROKU_NO AND k1.DATE >= b2.START_DATE AND k1.DATE < b2.END_DATE 34 LEFT JOIN Table2 AS b3 ON k1.ID = b3.ID AND c1.NAME_3 = b3.TOUROKU_NO AND k1.DATE >= b3.START_DATE AND k1.DATE < b3.END_DATE 35 LEFT JOIN Table2 AS b4 ON k1.ID = b4.ID AND c1.NAME_4 = b4.TOUROKU_NO AND k1.DATE >= b4.START_DATE AND k1.DATE < b4.END_DATE 36 LEFT JOIN Table2 AS b5 ON k1.ID = b5.ID AND c1.NAME_5 = b5.TOUROKU_NO AND k1.DATE >= b5.START_DATE AND k1.DATE < b5.END_DATE 37 LEFT JOIN Table2 AS b6 ON k1.ID = b6.ID AND c1.NAME_6 = b6.TOUROKU_NO AND k1.DATE >= b6.START_DATE AND k1.DATE < b6.END_DATE 38 LEFT JOIN Table2 AS b7 ON k1.ID = b7.ID AND c1.NAME_7 = b7.TOUROKU_NO AND k1.DATE >= b7.START_DATE AND k1.DATE < b7.END_DATE 39 LEFT JOIN Table2 AS b8 ON k1.ID = b8.ID AND c1.NAME_8 = b8.TOUROKU_NO AND k1.DATE >= b8.START_DATE AND k1.DATE < b8.END_DATE 40 LEFT JOIN Table5 AS c2 ON k1.TOUROKU_2 = c2.TOUROKU_NO 41 LEFT JOIN Table2 AS b9 ON k1.ID = b9.ID AND c2.NAME_9 = b9.TOUROKU_NO AND k1.DATE >= b9.START_DATE AND k1.DATE < b9.END_DATE 42 LEFT JOIN Table2 AS b10 ON k1.ID = b10.ID AND c2.NAME_10 = b10.TOUROKU_NO AND k1.DATE >= b10.START_DATE AND k1.DATE < b10.END_DATE 43 LEFT JOIN Table2 AS b11 ON k1.ID = b11.ID AND c2.NAME_11 = b11.TOUROKU_NO AND k1.DATE >= b11.START_DATE AND k1.DATE < b11.END_DATE 44 LEFT JOIN Table2 AS b12 ON k1.ID = b12.ID AND c2.NAME_12 = b12.TOUROKU_NO AND k1.DATE >= b12.START_DATE AND k1.DATE < b12.END_DATE 45 LEFT JOIN Table2 AS b13 ON k1.ID = b13.ID AND c2.NAME_13 = b13.TOUROKU_NO AND k1.DATE >= b13.START_DATE AND k1.DATE < b13.END_DATE 46 LEFT JOIN Table2 AS b14 ON k1.ID = b14.ID AND c2.NAME_14 = b14.TOUROKU_NO AND k1.DATE >= b14.START_DATE AND k1.DATE < b14.END_DATE 47 LEFT JOIN Table2 AS b15 ON k1.ID = b15.ID AND c2.NAME_15 = b15.TOUROKU_NO AND k1.DATE >= b15.START_DATE AND k1.DATE < b15.END_DATE 48 LEFT JOIN Table2 AS b16 ON k1.ID = b16.ID AND c2.NAME_16 = b16.TOUROKU_NO AND k1.DATE >= b16.START_DATE AND k1.DATE < b16.END_DATE 49; 50 51 52テーブルは適当です。 53create table Table1 (NoFlg int, RTth text, LTth text); 54create table Table2 (ID int, TOUROKU_NO int, START_DATE datetime, END_DATE datetime, BCD text); 55create table Table3 (ID int, NO int, DSP_NO text, UR int, UL int, DR int, DL int, TOUROKU_1 int, TOUROKU_2 int, DATE datetime, BCD text); 56create table Table4 (TOUROKU_NO int, NAME_1 int, NAME_2 int, NAME_3 int, NAME_4 int, NAME_5 int, NAME_6 int, NAME_7 int, NAME_8 int); 57create table Table5 (TOUROKU_NO int, NAME_9 int, NAME_10 int, NAME_11 int, NAME_12 int, NAME_13 int, NAME_14 int, NAME_15 int, NAME_16 int); 58

LINQ

1var q = from em in Table3s 2 join thUR in Table1s on em.UR equals thUR.RTth 3 join thUL in Table1s on em.UL equals thUL.LTth 4 join thDr in Table1s on em.DR equals thDr.RTth 5 join thDl in Table1s on em.DL equals thDl.LTth 6 join HK in Table4s on em.TOUROKU_1 equals HK.TOUROKU_NO 7 //この下のjoin句で対象のエラーが発生 8 join TB2 in Table2s on new { a=em.ID, b=HK.NAME_1 } equals new { a=TB2.ID, b=TB2.TOUROKU_NO } 9 where em.DATE >= TB2.START_DATE & em.DATE< TB2.END_DATE 10 select new { 11 m.ID, 12 em.DATE, 13 em.NO, 14 em.DSP_NO, 15 BI = (thUR.RTth == "0" ? "" : "R" + thUR.RTth) + 16 (thUL.LTth == "0" ? "" : "L" + thUL.LTth) + 17 (thDr.RTth == "0" ? "" : "r" + thDr.RTth) + 18 (thDl.LTth == "0" ? "" : "l" + thDl.LTth), 19 NAME_ID = (HK.NAME_1 == "0" ? "" : TB2.BCD) 20};

投稿2016/10/25 09:25

編集2016/10/26 02:36
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DENQ

2016/10/25 10:02

回答頂いたのに申し訳ありませんが、SQLではなくlinqのjoinの方法を質問させて頂いてます。
guest

0

「Linq join句のいずれかの式が正しくありません」で検索したらこんなの出てきましたけども。
どうでしょうか。

http://piyopiyocs.blog115.fc2.com/blog-entry-72.html

結局の所、比較項目の元々の名前が違ったからダメだった模様です

名前つけてあげたら無事エラー消滅

投稿2016/10/25 07:41

sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk_3122

2016/10/25 07:53 編集

上記サイトで書いてあるのはここ ↓ に相当する部分ですかね? join TB2 in Table2 on new { a = em.ID, b = HK.NAME_1} equals new { a = TB2.ID, b = TB2.TOUROKU_NO} into g 名前ちゃんと付いてますね。違いましたかね… すみません
DENQ

2016/10/25 08:41

ですね。複数のjoinのあとのwhere句をどうにかうまく書きたいのですがどうやっていいのかわからないですね。
sk_3122

2016/10/25 09:55 編集

昔の自分用メモに同じようなエラーがあったので一応貼っておきますね。 全然関係なかったらごめんなさいね。 ---------- 【LEFT JOIN で ON 句にリテラル値を指定する場合】 var list = from t1 in this.ObjectContext.Tbl1 join t2 in this.ObjectContext.Tbl2 on new { t1.Id1, IsDeleted=(bool?)false } equals new { t2.Id1, t2.IsDeleted } select new { t1.Name, t2.Name }; 【駄目だったケース】 on new { t1.Id1, IsDeleted=false } equals new { t2.Id1, t2.IsDeleted } // join 句のいずれかの式の型が正しくありません。 // 'Group Join' の呼び出しで型が推論できませんでした。 // → t2.IsDeleted が Nullable だったので (bool?) でキャストしないと駄目らしい。 ---------- # 要はキャストとかは関係ないですかね?っていう。 # 関係ないかなー…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問