У меня есть некоторые объекты, которые имеют свойство IsDeleted
(логическое удаление), и когда я делаю запросы, стандартом будет возвращать все, кроме удаленных, например:
var query = collection.Where(e=> !e.IsDeleted);
Я использую построитель предикатов для создания некоторых предикатов для повторного использования, поэтому у меня есть такой поиск:
public static Func<FakeEntity, bool> ContainsName(string keyword) {
var predicate = NotDeleted();
predicate = predicate.And(e => e.Name.Contains(keyword));
return predicate;
}
и предикат NotDeleted()
:
public static Func<FakeEntity, bool> NotDeleted() {
var predicate = PredicateBuilderDelegate.True<FakeEntity>();
predicate = predicate.And(e => !e.IsDeleted);
return predicate;
}
я хочу создать еще один предикат, который «отменяет» NotDeleted()
, поэтому в коде я могу вызвать:
var result = collection.Where(FakeEntity.ContainsName("keyword")
.And(FakeEntity.IncludeDeleted()));
Идея заключается в том, что когда я использую ContainsName
, он возвращает все объекты, содержащие эту строку, которые не были удалены, но я хочу каким-то образом явно сказать, что нужно включить эти удаленные.
Это понятно?
То, что я попробовал без везения, это:
public static Func<FakeEntity, bool> IncludeDeleted() {
var predicate = PredicateBuilderDelegate.True<FakeEntity>();
predicate = predicate.And(e => e.IsDeleted);
return predicate;
}
ContainsName
должна фильтровать элементы, содержащие имя, а не элементы, содержащие имя и не удаляемые. Если вам нужны элементы, которые содержат имя и не удаляются, ваш запрос работает так, как предполагалось. Если вам нужны элементы, которые содержат имя и не удаляются, то это то, о чем вы просите. - person Servy   schedule 29.10.2014TRUE
просто бессмысленно. Вы можете просто удалить весь этот код. - person Servy   schedule 29.10.2014ContainsName
, так иIsActiveAndContainsName
- person Servy   schedule 29.10.2014