我在简单的SQL中编写了以下查询, 我想把它改成使用LINQ,我试过了,但我的LINQ查询和原始的SQL语句给出了不同的记录集。
简单SQL查询:
select *
from Paymentadvices
where status = 3
and Id in (select PaymentAdviceId from Approvals where ApprovedById = 13)
LINQ:
var myPaymentAdviceList = from pa in db.PaymentAdvices
where pa.Status == 3
join Ap in db.Approvals on pa.Id equals
Ap.PaymentAdviceId
where Ap.EmployeeId == 13
orderby pa.PaidDate descending
select pa;
我不应该使用加入我想,我应该使用什么?
答案 0 :(得分:0)
var a = db.Approvals.Where( x => x.ApprovalById = 13).PaymentAdviceId;
var b = db.Paymentadvices.Where(x => x.status ==3 && a.Contains(x.Id);
.Contains()
生成WHERE IN ()
,您不需要加入
var a = from a in db.Approvals
where a.ApprovedById == 3
select a.PaymentAdviceId;
var b = (from p in db.PaymentAdvices
where p.Status == 3 &&
a.Contains(p.Id)
select p).ToList();
这些都是linq,top只是lambda表达式,它们常用于Linq查询。我建议你习惯于阅读/写作这两种风格。你将在lambda风格中遇到的大部分代码
答案 1 :(得分:0)
我相信下面的内容会起作用:
var query = from p in db.PaymentAdvices
where p.Status == 3 && db.Approvals
.Select(a => a.Id)
.Where(a => a.ApprovedById == 13)
.Contains(p.Id)
select p;
虽然值得注意的是,上面的@Scott Selby和@axrwkr解决方案基本上与另一种形式的完全相同。