using System.Collections.Generic;
public record ApprovalLetter(int ApplyNowLoanPurposeId, bool IsHtml, string? Template);
public record CobApprovalLetter(int ApplyNowLoanPurposeId, bool IsHtml, string? Template) : ApprovalLetter(ApplyNowLoanPurposeId, IsHtml, Template);
public record CobPartnerApprovalLetterOverride(int PartnerId, int ApplyNowLoanPurposeId, bool IsHtml, string? Template) : ApprovalLetter(ApplyNowLoanPurposeId, IsHtml, Template);
public static void Main()
var cobApprovalLetter = new List<CobApprovalLetter>
new CobApprovalLetter(ApplyNowLoanPurposeId: 1, IsHtml: true, Template: "Templatel"),
new CobApprovalLetter(ApplyNowLoanPurposeId: 2, IsHtml: false, Template: "Template2"),
new CobApprovalLetter(ApplyNowLoanPurposeId: 3, IsHtml: true, Template: "Template3")
var cobPartnerApprovalLetterOverride = new List<CobPartnerApprovalLetterOverride>
new CobPartnerApprovalLetterOverride(ApplyNowLoanPurposeId: 1, PartnerId: partnerId, IsHtml: false, Template: "OverrideTemplate1"),
new CobPartnerApprovalLetterOverride(ApplyNowLoanPurposeId: 3, PartnerId: partnerId, IsHtml: true, Template: null)
from approvalLetter in cobApprovalLetter
join partnerOverride in cobPartnerApprovalLetterOverride on approvalLetter.ApplyNowLoanPurposeId equals partnerOverride.ApplyNowLoanPurposeId
where partnerOverride.PartnerId == partnerId
select new ApprovalLetter
ApplyNowLoanPurposeId: approvalLetter.ApplyNowLoanPurposeId,
IsHtml: partnerOverride != null ? partnerOverride.IsHtml : approvalLetter.IsHtml,
Template: partnerOverride == null ? null : partnerOverride.Template == null ? approvalLetter.Template : partnerOverride.Template
foreach (var item in queryResult)
Console.WriteLine($"ApplyNowLoanPurposeId: {item.ApplyNowLoanPurposeId}, IsHtml: {item.IsHtml}, Template: {item. Template}");
var HasApprovalLetter = queryResult.Any(x => x.ApplyNowLoanPurposeId == 3 && !x.IsHtml);
Console.WriteLine($"HasApprovalLetter: {HasApprovalLetter}");