Linq离开了外围组,然后离开了外围组

时间:2013-08-09 09:26:31

标签: linq entity-framework

我有这个问题,我想把它作为linq:

select * 
from stuff
inner join stuffowner so on so.stuffID = stuff.stuffID
left outer join (select  min(loanId) as loanId, stuffownerId from loan  
 where userid = 1 and status <> 2 group by stuffownerId) t on t.stuffownerid = so.stuffownerid
left outer join loan on t.LoanId = loan.LoanId

当这个完成时,我想做一个linq Group by让Stuff有钥匙,然后把东西+ Loan作为价值。

如果没有子查询,我似乎无法获得一个很好的查询(因此双左外部)。

所以基本上我的查询的作用是,我在数据库中的每个东西,带来所有者,然后我想带来用户对这些东西的第一笔贷款。

我尝试了各种linq:

from stuff in Stuffs
join so in StuffOwners on stuff.StuffId equals so.StuffId
join  tLoan in Loans on so.StuffOwnerId equals tLoan.StuffOwnerId into tmpJoin 
from tTmpJoin in tmpJoin.DefaultIfEmpty()
group tTmpJoin by new {stuff}  into grouped
select new {grouped, fluk = (int?)grouped.Max(w=> w.Status )}

这不好,因为如果我没有得到东西,并且最重要的是它似乎产生了很多查询(LinqPad)

from stuff in Stuffs
join so in StuffOwners on stuff.StuffId equals so.StuffId
join tmpLoan in 
 (from tLoan in Loans group tLoan by  tLoan.StuffOwnerId into g 
 select new {StuffOwnerId = g.Key, loanid = (from t2 in g select t2.LoanId).Max()})
 on so.StuffOwnerId equals tmpLoan.StuffOwnerId
 into tmptmp  from tMaxLoan in tmptmp.DefaultIfEmpty()
select new {stuff, so, tmptmp}

似乎也会生成很多子查询。

我尝试过使用keyworkd:

from  tstuffOwner in StuffOwners 
let tloan = Loans.Where(p2 => tstuffOwner.StuffOwnerId == p2.StuffOwnerId).FirstOrDefault()
select new { qsdq = tstuffOwner, qsdsq= (int?) tloan.Status, kwk= (int?) tloan.UserId, kiwk=  tloan.ReturnDate  }

但是我从tLoan得到的信息越多,查询得到的子查询越多

实现这一目标的最佳方法是什么? 感谢

0 个答案:

没有答案