鉴于以下示例模型,我需要按其所有者的属性查询项目。这是实体框架集,我想使用 LINQ 执行此操作。
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
  }
我已经有一个带有 Owners 过滤器的PredicateBuilder 。
我想将这个谓词(它基本上是where子句的内容)应用于Owner对象,以获取Item其所有者满足谓词条件的所有对象。
如果Owner是所有者列表...我可以使用.Any(predicate),但它的基数是 1。
编辑:
我试图这样做是为了避免必须得到所有Owners满足谓词条件的东西,然后再做一个Contains(idOwner).
db.Items.Where(c => OwnerIdsCollection.Contains(c.idOwner ?? 0));
我已经看到了它为甚至没有相关的所有者创建的大量 SQL CASE 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 criteria checkings as above
    return predicate;
}
标准是从用户过滤器中获得的。然后,我通常用它来查询 Owners 集合db.Owners.Where(predicate);
现在,从概念上讲,我需要执行以下操作:  db.Items.Where(x => /*Items filters*/  &&  x.MyOwner.Where(myOwnerPredicate))