0

我用简单的 SQL 编写了以下查询,我想将其更改为使用 LINQ,我已经尝试过,但是我的 LINQ 查询和原始 SQL 语句给出了不同的记录集。

简单的 SQL 查询:

select * 
from Paymentadvices 
where status = 3 
and Id in (select PaymentAdviceId from Approvals where ApprovedById = 13)

林克:

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;

我猜我不应该使用 join ,我应该使用什么?

4

2 回答 2

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 解决方案本质上是另一种形式的完全相同的东西。

于 2013-04-30T16:04:22.223 回答
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 ,顶部只是 Linq 查询中常用的 lambda 表达式。我建议你习惯阅读/写作两种风格。你会遇到的大部分代码都是 lambda 风格的

于 2013-04-30T15:04:56.583 回答