如何解决使用实体框架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)
我什至可以确定有一种更好的方法来编写此查询,但要点是有可能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。