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 クエリで一般的に使用される単なるラムダ式です。両方のスタイルの読み書きに慣れることをお勧めします。ラムダ スタイルで遭遇するコードの大部分

于 2013-04-30T15:04:56.583 に答える