使用实体框架EF进行动态数据查询

问题描述

| 我想听到一些有关我要实现的方案的反馈。我目前已使用NHibernate的Criteria API来实现此方案,并且想知道是否有针对Entity Framework 4.1实施的类似操作。 我需要最终用户可以从UI中选择过滤条件,从而构建一个可以包含复杂AND / OR条件的查询。 例如:用户可以说:我想要
(Zip Code = 92037 AND Gender = F) OR (ZipCode = 92101 and Gender = M)
的学生 要么 我要students1的学生 这些查询通常是使用前端的树控件构建的。 我目前正在使用NHibernate进行这项工作。 NHibernate中的Criteria API确实很棒。但是,NHibernate有一个主要错误,那就是它不允许在1:many表上进行多个联接。 所以例如如果我有一个包含CATCODE(类别代码)和Answer的表,NHibernate当前将不允许我使用Criteria API进行多次查询。 所以我不能例如做:
WHERE CATCODE = A and Answer in (A,B,C) AND CATCODE = B and Answer in (V,H,Y)
。 由于这个限制,我一直试图从NHibernate移到Entity Framework。我不知道是否有使用API​​进行此类操作的好方法。 如果有的话,谁能告诉我一种更好的解决方案来实现这种功能? 如果有解决方案,很高兴听到NHibernate和EF专家的来信。     

解决方法

除了实体框架之外,我实际上并不了解NHibernate或其他任何OR / M,但假设您有一个名为Category的实体,并且category与Answers有关系(例如,每个category有很多答案)。 所以Category实体看起来像:
public class Category {
    public virtual string CATCODE{get;set}
    public virtual IList<Answer> Answers{get;set;}
}
然后您可以执行以下操作:
Categories.Where(x=>x.CATCODE ==\"A\").Where(x=>x.Answers.Any(l=>l.Name==\"1\" || l.Name==\"2\" || l.Name==3)
我什至可以确定有一种更好的方法来编写此查询,但要点是有可能。