Entity framework 基于完整对象的实体框架查询方法

Entity framework 基于完整对象的实体框架查询方法,entity-framework,linq-to-sql,entity-framework-4,linq-to-entities,entity-framework-4.1,Entity Framework,Linq To Sql,Entity Framework 4,Linq To Entities,Entity Framework 4.1,如何在实体框架中实现以下查询方法, 下面是NHibernate文档中的一个片段 实体框架是基于LINQ的。据说Linq是一种声明性语言,它的意思是告诉我们该做什么而不是如何做(命令式)。像这样的陈述 context.Orders.Select(o => o.OrderDate).Distinct(); 是一种声明性快捷方式,如果您愿意,用于“礼仪性”foreach语句,在该语句中,OrderDates如果以前未添加到列表中,则会添加到列表中 我不是NHibernate或其Criteria

如何在实体框架中实现以下查询方法, 下面是NHibernate文档中的一个片段


实体框架是基于LINQ的。据说Linq是一种声明性语言,它的意思是告诉我们该做什么而不是如何做(命令式)。像这样的陈述

context.Orders.Select(o => o.OrderDate).Distinct();
是一种声明性快捷方式,如果您愿意,用于“礼仪性”foreach语句,在该语句中,
OrderDate
s如果以前未添加到列表中,则会添加到列表中

我不是NHibernate或其CriteriaAPI的专家,但CriteriaAPI似乎比linq更具声明性。这使得比较它们很困难。一些不同之处:

  • 主要的一点是:在EF中不可能通过示例进行查询
  • 在linq中,无法为整个查询设置行为。例如,如果要排除零值属性,则必须在
    where
    谓词中指定它们中的每一个(这更接近于说明如何过滤)
  • EF中的病例敏感性完全不发达。例如,下面的语句

    context.Orders.Select(o => o.OrderDate).Distinct();
    
    People.Where(c=>string.Compare(c.Name,“z”,false)>0)

    将生成与相同的SQL

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

    数据库排序规则确定字符串比较的大小写敏感度

  • 您可以执行类似于的查询,但也可以为每个谓词指定:

    People.Where(c=>c.Name.Contains(“a”))

    (同样:案例中没有区别)

所以我不能给出你的条件查询的linq翻译。我必须知道类属性才能指定所有单独的谓词