2

我想听听关于我正在尝试实施的场景的一些反馈。我目前已经使用 NHibernate 的 Criteria API 实现了这个场景,并且想知道是否有任何类似的东西是为 Entity Framework 4.1 实现的。

我需要最终用户可以从 UI 中选择过滤条件,从而构建一个可以包含复杂 AND/OR 条件的查询。

例如:用户可以说:我想要学生(Zip Code = 92037 AND Gender = F) OR (ZipCode = 92101 and Gender = M)

或者

我希望学生有(State = CA OR State = FL) AND GPA = 4.0 AND GENDER = M

这些查询通常使用前端的树控件构建。

我目前正在使用 NHibernate 进行这项工作。NHibernate 中的 Criteria API 非常棒。但是,NHibernate 有一个主要错误,那就是它不允许在 1:many 表上进行多个连接。

因此,例如,如果我有一个包含 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 专家的意见。

4

1 回答 1

0

除了实体框架,我真的不知道 NHibernate 或任何其他 OR/M,但假设您有一个名为 Category 的实体,并且 category 与 Answers 有关系(例如,每个类别都有很多答案)。所以类别实体看起来像:

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)

我什至确信有更好的方法来编写这个查询,但关键是它是可能的。

于 2011-05-24T11:42:51.947 回答