我想听一些关于我正在尝试实施的方案的反馈。我目前使用Criteria API for NHibernate实现了这个场景,并想知道是否有类似于Entity Framework 4.1的实现。
我需要最终用户可以从UI中选择过滤条件,从而构建一个可以包含复杂AND / OR标准的查询。
例如:用户可以说:我希望学生(Zip Code = 92037 AND Gender = F) OR (ZipCode = 92101 and Gender = M)
OR
我希望学生(State = CA OR State = FL) AND GPA = 4.0 AND GENDER = M
这些查询通常使用前端的树控件构建。
我目前使用NHibernate进行此操作。 NHibernate中的Criteria API非常适合这样做。但是,NHibernate有一个主要的错误,那就是它不允许在1:多表上进行多次连接。
因此,例如如果我有一个包含CATCODE(类别代码)和答案的表,NHibernate目前不会让我使用Criteria API进行多次查询。
所以我不能为...执行:WHERE CATCODE = A and Answer in (A,B,C) AND CATCODE = B and Answer in (V,H,Y)
。
由于这种限制,我一直试图将NHibernate迁移到实体框架中。我不知道是否有一种使用API来做这种事情的好方法。
有没有人可以告诉我一个更好的解决方案来实现这样的功能,如果有的话?
如果有办法解决这个问题,我很乐意听取NHibernate和EF专家的意见。
答案 0 :(得分:0)
除了实体框架之外,我真的不知道NHibernate或任何其他OR / M,但假设您有一个名为Category的实体,而类别与Answers有关(例如,每个类别都有很多答案)。 所以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)
我甚至确定有更好的方法来编写此查询,但重点是它是可能的。