[c#]筛选集合的子的集合

发布时间: 2017/2/28 23:07:23
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有下面的类︰

class Customer
{
   public int IdCustomer {get; set}
   public string Name {get; set;}
   public virtual ICollection<Expertise> Expertises {get; set;}
}

class Expertise
{
   public int IdExpertise {get; set;}
   public string Description {get; set;}
   public virtual ICollection<SubExpertise> SubExpertises {get; set;}
}

class SubExpertise
{
   public int IdSubExpertise { get; set;}
   public int IdExpertise {get; set;}
   public string Description {get; set;}
   public virtual Expertise Expertise {get; set;}
}

我如何可以筛选使用 IQueryable, SubExpertise和保持筛选条件?基本上我想要的SubExpertise,但保持可能性要在查询中添加更多的过滤器过滤

示例︰我想有一个 SubExpertise 'x' 或 'y' 的所有客户。请记住 SubExpertise 是 (专门知识) 集合的子集合。我可以有新过滤器在此之后。

解决方法 1:

我认为你是后一种方法来动态生成的表达式。你可以使用谓词生成器来做这项工作。我最喜欢的是这一个

使用这个小小的宝石你可以这样做︰

var pred = PredicateBuilder.Create<SubExpertise>(s => s.Description == "x");
pred = pred.Or(s => s.Description == "y");

var customers = db.Customers
                  .Where(c => c.Expertises
                               .Any(e => e.SubExpertises.AsQueryable()
                                          .Any(pred)));

e.SubExpertises必须强制转换为 IQueryable 因为它是编译时类型是 ICollection ,和扩展的方法 Any ,适合 ICollection 不接受 ExpressionFunc ,所以它不能编译。

赞助商