簡體   English   中英

過濾 LINQ 中的嵌套對象

[英]Filter on nested object in LINQ

我在 LINQ 中有以下查詢,以返回帶有策略風險列表的策略對象,並在策略風險中返回其事務移動列表。

corePolicy = _db.Policies
    .OrderByDescending(p => p.BatchId)
    .Include(policy => policy.PolicyRisks.Select(policyRisks =>
        policyRisks.TransactionMovements))
    .Include(policy => policy.PolicyRisks.Select(policyRisks =>
        policyRisks.PolicyRiskClaims.Select(prc =>
            prc.TransactionMovements)))
    .AsNoTracking()
    .First(p =>
        p.PolicyReference == policyFromStaging.PolicyReference &&
        p.PolicySourceSystemId == policyFromStaging.PolicySourceSystemId);

我如何將.Where()子句應用於交易動作,比如TransactionReference == 'ABC'

下面是我的數據模型

[Table("business.Policy")]
public class Policy
{
    [Required, StringLength(50)]
    public string PolicyReference { get; set; }

    public int PolicySourceSystemId { get; set; }
    public System PolicySourceSystem { get; set; }
}

[Table("business.PolicyRisk")]
public class PolicyRisk
{
    public ICollection<TransactionMovement> TransactionMovements { get; set; }
}

[Table("business.TransactionMovement")]
public class TransactionMovements
{
    public string TransactionReference { get; set; }
}

不可能在 Include 中使用 Where 語句。 你可以有任何類似下面的東西:

corePolicy = _db.Policies
.OrderByDescending(p => p.BatchId)
.Include(policy => policy.PolicyRisks.Select(policyRisks =>
    policyRisks.TransactionMovements))
.Include(policy => policy.PolicyRisks.Select(policyRisks =>
    policyRisks.PolicyRiskClaims.Select(prc =>
        prc.TransactionMovements)))
.AsNoTracking()
.Where(p => p.PolicyRisks.Any(pr => pr.PolicyRiskClaims.Any(prc => prc.TransactionMovements.Any(tm => tm.TransactionReference == 'ABC'))))
.First(p =>
    p.PolicyReference == policyFromStaging.PolicyReference &&
    p.PolicySourceSystemId == policyFromStaging.PolicySourceSystemId);

如果任何交易引用是 ABC(在其子集合上),這將包括策略。 因此,您再次必須在 c# 端有一個循環機制來獲取具有此 TransactionReference 的策略。

如果您想避免循環,那么我建議您從其他端含義編寫 linq,從 TransactionMovement 開始,然后返回 Policy。

您可以使用此處提到的某些第三方庫在 Include 過濾器中使用 WHERE 子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM