2016-04-05 4 views
1

Как мне указать, где условие в этом запросе включено в предложение?Linq Where Clause with Into

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 должен быть отфильтрован и должен быть соединен с левым внешним соединением.

ошибка является

Тело запроса должно заканчиваться выбора пункта или пункта группы

. Благодаря

+1

Вы можете использовать 'db.UserPrivDtls.Where (EE1 => EE1 .pageid == pg) ', так же, как вы делаете с' db.UserMsts.Where'. –

+0

@GertArnold Спасибо Это сработало. Должен сделать ответ. – Deb

ответ

0

Как вы уже смешивая синтаксис запросов и свободно синтаксис, наиболее практичным решением является добавить Where условие db.UserPrivDtls:

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, 
           };