Учитывая приведенные ниже образцы моделей, мне нужно запросить ITEMS по свойствам своего владельца. Это набор структур Entity Framework, и я хочу сделать это с помощью LINQ.Применить PredicateBuilder для запроса одного свойства объекта списка элементов
public class Owner
{
public int Id { get; set; }
public string Name { get; set; }
//More than 20 other properties
}
class Item
{
public int Id { get; set; }
public string Description { get; set; }
public Owner MyOwner { get; set; }
public int idOwner { get; set; }
//Several others properties
}
У меня уже есть PredicateBuilder с фильтром владельцев.
Я хотел бы применить этот предикат (это в основном контент для предложения where) к объекту Owner
, чтобы получить все Item
, чей Владелец удовлетворяет условию предиката.
Если Owner
был список владельцев ... Я мог бы использовать .Any(predicate)
, но его мощность равна 1.
EDIT:
Я пытаюсь сделать это, чтобы избежать того, чтобы получить все Owners
, который выполняет условия предиката, а затем делает Contains(idOwner)
.
db.Items.Where(c => OwnerIdsCollection.Contains(c.idOwner ?? 0));
Я видел masive SQL СЛУЧАЙ он создает под капотом для владельцев, которые даже не имеют связанных Items
.
РЕДАКТИРОВАТЬ 2 - предикат:
public static Expression<Func<Owner, bool>> GetPredicate(OwnerCriteria criteria)
{
var predicate = PredicateBuilder.True<Owner>();
if (criteria.Active.HasValue) {
predicate = predicate.And(p => p.Active == criteria.Active.Value);
}
//Several other criateria checkings as above
return predicate;
}
Критериев получают из фильтров пользователя. Затем я обычно использую его для запроса коллекции Owners, делающей db.Owners.Where(predicate)
;
Теперь, концептуально, мне нужно сделать что-то вроде: db.Items.Where(x => /*Items filters*/ && x.MyOwner.Where(myOwnerPredicate))
Является ли 'Владелец 'свойство на' Item' должно быть типа 'Owner', а не' int'? –
Владелец владеет тип Owner, был ошибкой. Я починил это. – Romias