如何在Entity Framework中实现以下查询方法, 以下是NHibernate文档http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html
的摘录 Example example = Example.create(cat)
.excludeZeroes() //exclude zero valued properties
.excludeProperty("color") //exclude the property named "color"
.ignoreCase() //perform case insensitive string comparisons
.enableLike(); //use like for string comparisons
List results = session.createCriteria(Cat.class)
.add(example)
.list();
答案 0 :(得分:0)
实体框架是基于LINQ的。据说Linq是一种声明性语言,这意味着要告诉做什么而不是如何这样做(命令性)。像
这样的陈述context.Orders.Select(o => o.OrderDate).Distinct();
如果您愿意,是一个声明性快捷方式,用于“礼仪”foreach
语句,如果之前没有将OrderDate
添加到列表中,则将where
添加到列表中。
我不是NHibernate或其标准API的专家,但标准API似乎比linq更具说明性。这使得很难比较它们。一些差异:
People.Where(c => string.Compare( c.Name, "z", false) > 0)
谓词中指定每个属性(这更接近于告诉 如何过滤)。案例敏感度在EF中完全不发达。例如,像
这样的陈述 People.Where(c => string.Compare( c.Name, "z", true) > 0)
将生成与
相同的SQL LIKE
数据库排序规则确定字符串比较的区分大小写。
您可以执行People.Where (c => c.Name.Contains("a"))
个查询,但是,再次为每个单独的谓词指定:
{{1}}
(再次:案件没有区别)
所以我无法真正给出你的标准查询的linq翻译。我必须知道类属性才能指定所有单个谓词。