在 ASP.NET Core-5 中,我有這兩個模型。
public class Mandate
{
[Key]
[Required]
public int Id { get; set; }
public int MerchantId { get; set; }
public string ReferenceNumber { get; set; }
public decimal Amount { get; set; }
public virtual Merchant Merchant { get; set; }
public virtual ICollection<MandateDetail> MandateDetails { get; set; }
}
public class MandateDetail
{
[Key]
[Required]
public int Id { get; set; }
public int MandateId { get; set; }
public int Status { get; set; }
public virtual Mandate Mandate { get; set; }
}
一項任務有多項任務詳情
var mandateQueryable = _context.mandates.AsQueryable().Where(m => m.MerchantId == merchantId);
var mandate = mandateQueryable.ToList();
var pagedMandates = await mandateQueryable.Include(l => l.MandateDetails)
.ThenInclude(m => m.Merchant)
.ToPagedListAsync();
MandateDetail 中的狀態欄位可以是 0、1 或 2
我想選擇一個查詢,其中狀態 = 2。如果相關任務的任何行 MandateDetail 不等于 2,則不應選擇該批相關欄位的記錄。
例如,它不應該從下表中選擇整個記錄,其中 Mandate 中的 id = 1 和 MandateDetail 中的 MandateId = 1,因為 MandateDetail 中 Status 的行之一不等于 2
授權
id | MerchantId | Amount
1 | 2 | 200000
2 | 2 | 150000
任務詳情
id | MandateId | Status
1 | 1 | 2
2 | 1 | 2
3 | 1 | 1
4 | 1 | 2
5 | 2 | 2
6 | 2 | 2
如何在我的查詢中使用var pagedMandates或var 命令查詢來實作這一點?
uj5u.com熱心網友回復:
您也可以將子表的條件放在下面,如下所示:
var pagedMandates = await mandateQueryable.Include(l => l.MandateDetails)
.ThenInclude(m => m.Merchant)
.Where(l => l.MandateDetails.Any(x=>x.Status!=2))
.ToPagedListAsync();
uj5u.com熱心網友回復:
您可以撰寫如下查詢。更新您的Where并添加附加條件以檢查!m.MandateDetails.Any(md => md.Status != 2)。
var mandateQueryable = _context.mandates
.Include(l => l.MandateDetails)
.ThenInclude(m => m.Merchant)
.Where(m => m.MerchantId == merchantId && !m.MandateDetails.Any(md => md.Status != 2))
.ToPagedListAsync();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/415675.html
標籤:
上一篇:“...asclass_name”和“(class_name)...”之間有區別嗎?
下一篇:異步超過同步的可能方法
