【问题标题】:"Order by Col1, Col2" using entity framework“Order by Col1, Col2”使用实体框架
【发布时间】:2010-12-14 14:36:42
【问题描述】:

我需要使用实体框架按 2 列排序。

这是怎么做到的?

return _repository.GetSomething().OrderBy(x => x.Col1   .. Col2)?

SELECT * FROM Foo ORDER BY Col1, Col2

【问题讨论】:

    标签: c# .net linq entity-framework


    【解决方案1】:

    试试OrderBy(x => x.Col1).ThenBy(x => x.Col2)。无论如何,它是一个 LINQ 功能,并不是 EF 独有的。

    【讨论】:

      【解决方案2】:

      另一种方式:

      qqq.OrderBy(x => new { x.Col1, x.Col2} )
      

      【讨论】:

      • 你如何按这种方式降序排列?
      • qqq.OrderByDescending(x => new { x.Col1, x.Col2} )
      • 在两个字符串字段上与 EntityFramework Core 一起使用时,我收到“至少一个对象必须实现 IComparable”错误消息。
      • 注意,我是来找EF Core的,所以这个错误可能是唯一的,但是:"无效的匿名类型成员声明器。必须使用成员赋值声明匿名类型成员,简单名称或成员访问权限。[uk.ac.sahfos.cpr.console.web]csharp(CS0746)"
      【解决方案3】:

      试试:

      OrderBy(x => x.Col1).ThenBy(x => x.Col2)
      

      按降序排列试试这个:

      OrderByDescending (x => x.Col1).ThenByDescending (x => x.Col2)
      

      【讨论】:

        【解决方案4】:

        以下排序发生在数据库级别。不在返回的结果上。

        试试:

        IQueryable<a>.OrderBy("col1 asc, col2 asc")
        

        示例 1:

        ctx.CateringOrders.OrderBy("Details.DeliveryDate asc, Details.DeliveryTime asc")
        

        示例 2:

        ctx.CateringOrders.OrderBy("{0} {1}, {2} {3}", 
            "Details.DeliveryDate", "asc",
            "Details.DeliveryTime", "asc" 
        )
        

        在哪里 IQueryable&lt;a&gt; 是实体查询, "col1 asc" 是第 1 列和排序方向 "col2 asc" 是第 2 列和排序方向

        【讨论】:

        • 您需要使用 System.Linq.Dynamic.Core 来执行此操作
        【解决方案5】:

        请注意,这不适用于 Telerik 的 Grid 或任何其他 Telerik 的 DataSource 组件。尽管它使用预过滤的 IQueryable 对象,但排序始终作为最后一步自动完成,有效地覆盖了您的排序设置。

        你必须关注:Specifying default sort in grid

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-12
          • 2012-06-26
          相关资源
          最近更新 更多