2016-04-05 16 views
1

どのように条件をwhere句でこのクエリのどこに供給するのですか?Linqどこで句を使用する

var res = from aa in db.UserMsts.Where(p => p.Id == id) 
       join bb in db.UserGrpHdrs on aa.usrgrpid equals bb.usrgrpid 
       join cc in db.UserGrpDtls on aa.usrgrpid equals cc.usrgrpid where cc.pageid == pg 
       join dd in db.UserPrivHdrs on new { aa.usrgrpid, userid = aa.Id } equals new { dd.usrgrpid, dd.userid } into ddd 
       from dd in ddd.DefaultIfEmpty()// <== left outer join 

//Error in following line 
       join ee in db.UserPrivDtls on dd.usrprivid equals ee.usrprivid 
       where ee.pageid == pg into eee // error here at into 

       from ee in eee.DefaultIfEmpty() // <== left outer join 
       select new UserPrivDto{ 
        CanAdd = ee.addpriv != null ? ee.addpriv : cc.addpriv, 
        CanEdit = ee.editpriv != null ? ee.editpriv : cc.editpriv, 
        CanView = ee.viewpriv != null ? ee.viewpriv : cc.viewpriv, 
        CanDel = ee.delpriv != null ? ee.delpriv : cc.delpriv, 
            }; 

UserPrivDtlsはフィルタリングする必要があり、左外部結合で結合する必要があります。

エラーは、照会本体がselect句またはGROUP句

で終わらなければなりません

です。 おかげ

+1

あなたは 'db.UserPrivDtls.Where(EE1 => EE1を使用することができます.pageid == pg) 'と同様に、' db.UserMsts.Where'と同様です。 –

+0

@GertArnoldありがとうそれは働いた。答えにする必要があります。 – Deb

答えて

0

すでにクエリ構文と流暢な構文を混合しているとして、最も現実的な解決策はdb.UserPrivDtlsWhere条件を追加です:

var res = from aa in db.UserMsts.Where(p => p.Id == id) 
      join bb in db.UserGrpHdrs on aa.usrgrpid equals bb.usrgrpid 
      join cc in db.UserGrpDtls on aa.usrgrpid equals cc.usrgrpid where cc.pageid == pg 
      join dd in db.UserPrivHdrs on new { aa.usrgrpid, userid = aa.Id } equals new { dd.usrgrpid, dd.userid } into ddd 
      from dd in ddd.DefaultIfEmpty() 

      join ee in db.UserPrivDtls.Where(ee1 => ee1.pageid == pg) 
       on dd.usrprivid equals ee.usrprivid 
       into eee 
      from ee in eee.DefaultIfEmpty() 

      select new UserPrivDto{ 
       CanAdd = ee.addpriv != null ? ee.addpriv : cc.addpriv, 
       CanEdit = ee.editpriv != null ? ee.editpriv : cc.editpriv, 
       CanView = ee.viewpriv != null ? ee.viewpriv : cc.viewpriv, 
       CanDel = ee.delpriv != null ? ee.delpriv : cc.delpriv, 
           }; 
関連する問題