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



。我有一个带有子实体的实体。我必须根据子实体值进行过滤。例如,在下面的查询中,

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

我有一个输入参数sourceQuoteId,它存在于子表引号中。这里的父表是Proposal。所以会有多个提案,每个提案都有多个报价。想法是根据报价id过滤提案。上面的查询在只存在一个引号时工作良好,但当有多个引号时它将不过滤。有人能帮我过滤基于子表?

如果您想要的是满足标准的任何报价的提案,那么您应该调用Any而不是All

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

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

你的查询应该是:

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

try this:

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

最新更新