【问题标题】:OrderBy("it." + sort) -- Hard coding in LINQ to Entity framework?OrderBy("it." + sort) -- LINQ to Entity 框架中的硬编码?
【发布时间】:2010-07-23 16:08:53
【问题描述】:

我一直在尝试在我的应用程序中使用动态 LINQ to Entity 来在运行时指定 OrderBy 属性。但是,当使用大多数文档中描述的代码时:

var query = context.Customer.OrderBy("Name");

我收到以下异常:

System.Data.EntitySqlException:无法在当前范围或上下文中解析“名称”。确保所有引用的变量都在范围内,加载了所需的模式,并且正确地引用了命名空间。

经过大量搜索,我找到了这个 MSDN 页面:

http://msdn.microsoft.com/en-us/library/bb358828.aspx

其中包括以下代码示例:

ObjectQuery<Product> productQuery2 = productQuery1.OrderBy("it.ProductID");

这促使我将代码更改为以下内容:

var query = context.Customer.OrderBy("it.Name");

在此之后代码完美运行。任何人都能够确认这确实是使用 LINQ to Entity 获得 OrderBy 的正确方法吗?我不敢相信框架会以这种方式实现,也许我忽略了什么?

谢谢,马特

【问题讨论】:

    标签: linq entity sql-order-by


    【解决方案1】:

    it.Name 语法是 ESQL,并且确实特定于 EF。有时使用它有充分的理由(例如,排序规则说明符),但这不是我通常做的。

    通常我使用标准的 LINQ 表达式:

    var query = context.Customer.OrderBy(p => p.Name);
    

    您也可以使用 System.Linq.Dynamic,如果您从 Code Gallery 下载它,然后您的原始查询:

    var query = context.Customer.OrderBy("Name");
    

    ...会起作用的。

    【讨论】:

    • 谢谢,我会尝试动态库,看看是否有效。您能否提供一个最好使用“it”语法的示例?它似乎将您的代码与您无法控制的实现紧密结合在一起。 IE。它可能会改变并因此破坏您的代码?谢谢,马特
    • 恕我直言,在 System.Linq.Dynamic 上使用 ESQL 的唯一充分理由是,如果您需要使用 ESQL 中 S.L.D. 中不可用的少数功能之一,例如排序规则。大多数情况下,我更喜欢 S.L.D.
    【解决方案2】:

    目前还没有好办法

    我对这个问题的回答是创建一个带有参数来控制排序的存储过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 2011-04-27
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多