Я пытаюсь выяснить, как использовать PredicateBuilder, чтобы определить, существует ли какой-либо набор записей в пределах выражения. Поэтому, учитывая OrderId и список ProductIds в качестве спецификации, я хочу знать, содержат ли записи OrderDetail Order все элементы спецификации. Не только один или некоторые из них, но все они.Создание автономного булева выражения с PredicateBuilder
Так что я мог бы сделать:
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);
Но затем, после того, как я получаю результат, я бы а) устранить дубликаты (потому что в моем случае несколько Детали_Заказов может иметь тот же ProductId), а затем б) сравните счетчик результатов с подсчетом spec. Все это выполнимо вне выражения, но есть ли элегантный способ оценить все это в выражении, чтобы результат был логическим?
То есть, я хотел бы, чтобы выражение было самодостаточным, чтобы его можно было передавать как есть, и те, которые я ему даю, не должны знать, как делать «пост-обработку», чтобы фигурировать если это правда.
В чем заключается основной провайдер linq? – AakashM