2016-08-30 11 views
0

以下、2つのクエリがあります。私はSqlクエリとlinqクエリを持っています。私はlinqクエリをSQLクエリと論理的に同等にすることができませんでした。私の現在の問題は、次のコメント//right hereの行にあります。変換左の外部ジョインとwhere節をLinq-to-SQLに変換

私はu.isDeletedにアクセスしようとすると、コンパイルエラーを取得しています:

誰かが私に理由を教えて、私はしてくださいコンパイルするクエリを修正するのに役立つことができます。これが最適な方法でない場合は、私は提案をすることができます。どうもありがとうございました!!!! (動作しない)

LINQの私は、LINQ

SELECT m.* 
FROM Foo AS m 
INNER JOIN Bar AS u ON m.Id = u.m_Id 
LEFT JOIN Temp AS vm on u.M_Id = temp.m_Id 
WHERE vm.id IS NULL AND u.Id = 32 
+0

私たちのために読みやすくするためにあなたのコードを大文字にしないでください。実際には、コードのコンパイルは読みにくい)。実際のコードを表示してください。 –

+0

コードを読みやすくするためにコンパイルしないものに変更しないでください。私たちはコンパイルしたものを読むことに慣れており、それを別の形で見るのはちょうど相殺しているだけです。 (それと、すべての大文字のコードは目障りです)。 – Siyual

+0

SQLは*有効な*ではないので、問題が何であるかを知ることは困難です。 –

答えて

4

に変換したい

var ret = (from m IN db.Foo 
      join u in db.Bar on m.Id equals u.m_Id 
      into FooBars 
      from vm IN db.Temp.DefaultIfEmpty() 
      where vm == null && u.Id = 32 // right here 
      select m).ToList(); 

SQLクエリは、私はあなたがleft join構文間違って持ってだと思います。そうdb.Barに参加する際に間違ったそれを使用している - - そこには、通常の参加

  • 左を実行するあなたが最初GroupJoinを使い参加したいinto X構文はGroupJoin方法である

    var ret = (from m IN db.Foo 
          join u in db.Bar on m.Id equals u.m_Id 
          join vm in db.Temp on u.M_Id = temp.m_Id into vmg 
          from vm im vmg.DefaultIfEmpty() 
          where vm == null && u.IsDeleted 
          select m).ToLIST(); 
    
    • :これはどのようにありますグループから選択すると、DefaultIfEmptyが追加されます。左の

    参照ドキュメントには参加 - それはのような上記のクエリ構文でもメソッドの構文の両方を示す(および使用していますGroupJoin

    あなたのコンパイルエラーについては

    あなたのお問い合わせ:

    var ret = (from m IN db.Foo 
        join u in db.Bar on m.Id equals u.m_Id 
        into FooBars 
        from vm IN db.Temp.DefaultIfEmpty() 
        where vm == null && u.Id = 32 // right here 
        select m).ToList(); 
    

    Rあなたの質問にはuというようなものはありません。

  • +0

    ありがとうございます。それは魅力のように働いた! – gh9

    +0

    @ gh9 - あなたは歓迎です:)私が追加したSOドキュメンテーションをチェックし、異なった構文を見てください。それが役に立つ場合は、そこにupvoteすることもできます:) –

    関連する問題