我有 3 張桌子Purchase、PurchaseBill和PurchasePayment。
Purchase與 具有一對多關系 與PurchaseBill
PurchaseBill具有一對多關系PurchasePayment
我正在尋找與此 SQL Query 等效的 Linq (fluent)
SELECT COUNT('') FROM PurchasePayment
WHERE PurchaseBillId IN (
SELECT PurchaseBillId FROM PurchaseBill WHERE PurchaseId = @PurchaseId
)
基本上我想知道是否PurchasePayment存在任何記錄@PurchaseId
目前我正在使用
var bills = _context.PurchaseBill.Where(a => a.PurchaseId == obj.Id);
foreach (var bill in bills)
{
var hasPayment = _context.PurchasePayment.Any(a => a.PurchaseBillId == bill.Id);
if (hasPayment)
ctx.AddFailure("Cannot modify paid Purchase.");
}
我試過
var hasPayment = _context.PurchasePayment.Any(w => bills.Contains(w.PurchaseBillId));
了,但它不起作用。是否可以在不回圈 Linq 的情況下做到這一點?
uj5u.com熱心網友回復:
你可以實作這樣的事情:
var PurchaseId=1;
var result = _context.PurchasePayment.Where(x=>_context.PurchaseBill.Where(y=>y.PurchaseId==PurchaseId).Select(y=>y.PurchaseBillId).ToList().Contains(x.PurchaseBillId)).Count();
uj5u.com熱心網友回復:
你有沒有試過這個:
var hasPayment = _context.PurchasePayment.Where(x => _context.PurchaseBill.Where(a => a.PurchaseId == obj.Id).Any(y => y.PurchaseBillId == x.PurchaseBillId)).Any();
我在這里嘗試了一個示例: https ://dotnetfiddle.net/uTs6pd
uj5u.com熱心網友回復:
我同意格特的觀點;您應該有一個PurchaseBill帶有ICollection<PurchasePayment> PurchasePayments屬性(鏈接到多次付款)和int PurchaseId屬性(鏈接回單次購買)的類,并且能夠執行以下操作:
var hasPayment = context.PurchaseBills.Any(
pb => pb.PurchaseId == obj.Id && pb.PurchasePayments.Any()
);
“是否有任何帶有 PurchaseId blahblah 和任何 PurchasePayment 的采購單?”
或者,如果您打算對每張賬單及其付款做一些事情,例如:
var bills = context.PurchaseBills.Include(pb => pb.PurchasePayments);
foreach(var pb in bills){
if(pb.PurchasePayments.Any()){
//do something with the bill and its purchase here
}
}
但是,如果您要做的只是將訊息添加到錯誤串列中,請不要這樣做;為了查看并找到一個可能有付款記錄的賬單記錄,需要下載大量資料 - 最好通過第一個要求資料庫提供簡單布林值的建議來完成 - “是否有任何付款方式購買 ID?”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/483347.html
上一篇:GoLangGin-系結來自POST請求的JSON資料將所有識別符號欄位重寫為0
下一篇:角度形式相同的行欄位
