我试图弄清楚如何使用 PredicateBuilder 来确定一组特定的记录是否全部存在于一个表达式中。因此,给定一个 OrderId 和一个 ProductIds 列表作为规范,我想知道 Order 的 OrderDetail 记录是否包含所有规范项。不只是其中一个或一些——而是所有这些。
所以我可以这样做:
var inner = PredicateBuilder.False<OrderDetail>();
foreach (int spec in specs)
{
temp = spec;
inner = inner.Or(d => d.ProductId == temp);
}
var outer = PredicateBuilder.True<OrderDetail>();
outer = outer.And(d => d.OrderId == orderId);
outer = outer.And(inner);
但是,在得到结果之后,我必须 a) 消除重复项(因为在我的情况下,多个 OrderDetails 可以具有相同的 ProductId),然后 b) 将结果计数与规范计数进行比较。所有这些在表达式之外都是可行的,但是有没有一种优雅的方法来评估表达式中的所有内容,使得结果是布尔值?
也就是说,我希望表达式是自包含的,以便它可以按原样传递,而我给它的那些不必知道如何进行“后期处理”来确定它是否真实.