如何使用 Linq 在 child 表中应用过滤器

How to apply filter in child tables using Linq

网络申请。我有一个实体有 child 个实体。我必须根据 child 实体值进行过滤。例如在下面的查询中,

 var sourceProposal = proposals.ProposalResults.Where(x => x.Quotes.All(c => c.QuotationId.ToLower().Trim() == sourceQuoteId.ToLower().Trim()));

我有输入参数 sourceQuoteId,它出现在 child table 引号中。这里 parent table 是提案。所以会有多个提案,每个提案都有多个报价。想法是根据报价 ID 过滤提案。当只有一个引号存在时,上面的查询工作正常,但当有多个引号时它不会过滤。有人可以帮我根据 child table 过滤吗?

如果您想要的是包含满足条件的任何报价的提案,您似乎应该调用 Any 而不是 All

您仅在集合中有 1 个结果时才使此工作正常的原因是因为您使用的是 All 运算符,All 运算符用于检查序列中的所有元素是否满足给定条件。

你要使用的是Any运算符,Any运算符用于检查序列中的任何单个元素是否满足给定条件。

您的查询应该是:

    var sourceProposal = proposals.ProposalResults
       .Where(x => x.Quotes.Any(c => c.QuotationId.ToLower().Trim() == sourceQuoteId.ToLower().Trim()));

试试这个:

var sourceProposal = proposals.ProposalResults.Where(x => x.Quotes.Any(c => c.QuotationId.ToLower().Trim() == sourceQuoteId.ToLower().Trim()));