在将简单的SQL查询更改为LINQ查询后给出不同的记录集

时间:2013-04-30 14:58:31

标签: sql linq

我在简单的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;

我不应该使用加入我想,我应该使用什么?

2 个答案:

答案 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解决方案基本上与另一种形式的完全相同。