У меня есть класс Item
public class Item
{
public int ParentId {get;set;}
public int TypeId {get;set;}
public int? AttachedFileId {get;set;}
}
Мне необходимо для каждого родителя получить признак наличия того или иного типа. Наличием считается что отсутствуют item без прикрепленного файла, написал следующий запрос:
var items = _context.Set
Запрос возвращает данные так как мне необходимо, но мне кажется что условие
x.Where(x=>x.TypeId==1).Any() && x.Where(x=>x.TypeId==1).All(x=>x.AttachedFileId!=null) можно переписать
Также меня смущает, что метод All для пустой коллекции возвращает true
Пример на fiddle
Ответ
С точки зрения математики всё верно: метод All — это аналог квантора всеобщности, а для пустых множеств он всегда верен, независимо от условия.
Этот метод реализован так (за вычетом проверок):
public static bool All
Упростить ваше выражение что-то не очень получается. Разве что нагромоздить переменные для одного прохода, но с грубым нарушением идеи функциональщины:
bool any = false;
bool result = x.Where(x => any = x.TypeId == 1).All(x => x.AttachedFileId != null) && any;
Комментариев нет:
Отправить комментарий