0

を使用する必要がある WinForms プロジェクトに取り組んでいますLinq-To-Sql。ツールを使用して DataContext を作成し、SqlMetalいくつかのクエリを作成することができました。しかし、現在、解決できていない問題があります。

私はLEFT OUTER JOIN次のようにしようとしています:

MyDatabase db = new MyDatabase(...);

 var query = from p in db.ParentTable
             join t in db.ChildTable on new {A = p.child_ID, B = p.OtherID}
             equals new {A = t.ID, B = t.OtherID} into j1
             from c in j1.DefaultIfEmpty()
             select new
             {
                  ...
             };

このクエリを記述すると、コンパイル時にjoin単語でエラーが発生します。

結合句のいずれかの式の型が正しくありません。「GroupJoin」の呼び出しで型の推定に失敗しました

このエラーは、 isとisからのp.child_IDとの比較によって発生することがわかっています。しかし、どうすればこれを解決できますか?このエラーが発生しないようにするにはどうすればよいですか??t.IDp.child_IDint?t.IDintLEFT OUTER JOIN

p.child_IDint?、この列が のようにマークされているIS NULLためですSQL

誰かが私を助けてくれることを願っています。

4

2 に答える 2

6

GetValueOrDefault()メソッドを使用できます。現在の Nullable オブジェクトの値、またはオブジェクトのデフォルト値を取得します。

あなたの例に関して:

var query = from p in db.ParentTable
            join t in db.ChildTable on new {A = p.child_ID.GetValueOrDefault(0), B = p.OtherID}
            equals new {A = t.ID, B = t.OtherID} into j1
            from c in j1.DefaultIfEmpty()
            select new
            {
                ...
            };

p.child_ID が null になると、0 が返されます。

于 2012-09-13T17:28:43.250 に答える
4
于 2012-09-13T18:19:29.153 に答える