linq to sql -实体框架方法来查询基于一个完整的对象



如何在实体框架中实现以下查询方法,下面是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();

实体框架基于LINQ。Linq被认为是一种声明性语言,这意味着告诉做什么,而不是告诉如何做(命令式)。像

这样的语句
context.Orders.Select(o => o.OrderDate).Distinct();

是一个"仪式性"foreach语句的声明性快捷方式,如果OrderDate之前没有被添加到列表中,则将其添加到列表中。

我不是NHibernate或它的标准API方面的专家,但是标准API似乎比linq更具有声明性。这使得很难对它们进行比较。

  • 主要的:在EF中不能按示例查询。
  • 在linq中没有办法为整个查询设置行为。例如,如果你想排除零值属性,你必须在where谓词中指定它们中的每一个(这更接近于告诉如何过滤)。
  • EF中的大小写敏感性完全不发达。例如,像

    这样的语句

    People.Where(c => string.Compare( c.Name, "z", false) > 0)

    将生成与

    相同的SQL

    People.Where(c => string.Compare( c.Name, "z", true) > 0)

    数据库排序规则决定字符串比较的大小写敏感性。

  • 您可以执行LIKE查询,但是,再次为每个单独的谓词指定:

    People.Where (c => c.Name.Contains("a"))

所以我真的不能给你的标准查询一个linq翻译。我必须知道类的属性,以便能够指定所有单独的谓词。

相关内容

  • 没有找到相关文章

最新更新