【问题标题】:Dynamic Data Querying using Entity Framework (EF)使用实体框架 (EF) 进行动态数据查询
【发布时间】:2011-05-24 10:16:02
【问题描述】:

我想听听一些关于我正在尝试实施的方案的反馈。我目前已经使用 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 专家的意见。

【问题讨论】:

    标签: entity-framework architecture entity-framework-4.1 nhibernate-criteria


    【解决方案1】:

    我真的不知道 NHibernate 或除实体框架之外的任何其他 OR/M,但假设您有一个名为 Category 的实体,并且 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2018-11-21
      • 2020-06-16
      • 1970-01-01
      • 2012-07-31
      相关资源
      最近更新 更多