2016-04-05 13 views
1

Wie gebe ich wo Bedingung in dieser Abfrage mit in-Klausel?Linq where Klausel mit in

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 muss gefiltert werden und sollte mit einem linken äußeren Join verbunden werden.

Der Fehler ist

Eine Abfrage Körper mit einer select-Klausel oder Gruppenklausel

enden. Dank

+1

Sie verwenden könnten 'db.UserPrivDtls.Where (ee1 => ee1 .pageid == pg) ', genau wie bei' db.UserMsts.Where'. –

+0

@GertArnold Danke Es hat funktioniert. Sollte es eine Antwort geben. – Deb

Antwort

0

Wie Sie bereits Abfragesyntax und fließend Syntax Mischen, die praktischste Lösung hinzuzufügen, ist eine Where Zustand 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, 
           };