我有这个查询,我试图把它作为 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 拥有密钥,然后将 stuffowners + 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}
似乎也产生了很多子查询。
我试过 let 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 获得的信息越多,查询越长,子查询越多
实现这一目标的最佳方法是什么?谢谢