Я нашел, что IsStarted
свойства кажется, чтобы показать, если предикат был назначен.
В моем коде я использовал это для создания композитных операторов поиска, где параметры поиска являются необязательными. Например.
var quoteDatePredicate= PredicateBuilder.New<SearchData>();
if (searchCriteria.QuoteFromDate.HasValue)
{
quoteDatePredicate.And(x => x.QuoteDate >= searchCriteria.QuoteFromDate);
}
var saleDatePredicate = PredicateBuilder.New<SearchData>();
if (searchCriteria.SaleDate.HasValue)
{
saleDatePredicate.And(x => x.SaleDate >= searchCriteria.SaleDateFrom);
}
А потом я создаю еще одну переменный предикат и использовать If
заявление, чтобы добавить любые предикаты, которые были фактически присвоенными:
var datesPredicate = PredicateBuilder.New<SearchData>();
if (quoteDatePredicate.IsStarted) datesPredicate.Or(quoteDatePredicate);
if (saleDatePredicate.IsStarted) datesPredicate.Or(saleDatePredicate);
До сих пор, что, кажется, работает хорошо в моем коде.
В качестве альтернативы, сравнивая назначенный и незадействованные предикатной переменной в отладчике, кажется, предполагает, вы можете использовать это, чтобы проверить, если предикат был назначен:
if (dueOutOfDatePredicate.Parameters[0].Name = "f")
Я не пробовал, что, хотя.
Что такое 'PredicateBuilder'? – dotctor
@dotctor, построитель выражений LINQ! Нет? – Manoj
@dotctor: это «традиционное» имя класса для служебных операций над предикатами Linq, см., Например, http://www.albahari.com/nutshell/predicatebuilder.aspx – quetzalcoatl