【问题标题】:Difficult sort order with Linq to SQL使用 Linq to SQL 的困难排序顺序
【发布时间】:2014-02-21 03:11:16
【问题描述】:

我有一个需要以特定方式排序的对象列表。

相关的表格字段是:

  • ID(整数)
  • IsMandatory(位)
  • ParentID(int 可为空)
  • 代码(varchar)

我需要它们首先按 IsMandatory=true 排序,然后按 Code 排序,但是任何具有 ParentID 的内容都必须按 Code 排序,但直接出现在 ID 与 ParentID 相同的行之后(并且这些记录将始终将 IsMandatory 设置为 NULL )。

一些示例数据,这也是它们在订购时应该出现的顺序:

  • ID=1, IsMandatory=1, ParentID=NULL, Code="A"
  • ID=2,IsMandatory=NULL,ParentID=1,代码="A"
  • ID=3,IsMandatory=NULL,ParentID=1,代码="B"
  • ID=4, IsMandatory=1, ParentID=NULL, Code="B"
  • ID=5,IsMandatory=0,ParentID=NULL,代码="C"
  • ID=6, IsMandatory=NULL, ParentID=5, Code="A"
  • ID=7, IsMandatory=0, ParentID=NULL, Code="D"

如何在 Linq to SQL orderby 中最好地实现这一点?

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

    这是一个困难的排序!

    困难的原因源于您首先对父母记录属性进行排序,然后才是实际记录属性。

    我试图使变量尽可能地自我解释,但如果您有任何问题,请提出!

      var query = from x in context.Table
                  let parent = list.FirstOrDefault(y => x.ParentID == y.ID)
                  let parentIsMandatory = parent == null ? x.IsMandatory : parent.IsMandatory
                  let parentIsMandatoryOrder = parentIsMandatory == true ? 0 : 1
                  let parentCode = parent == null ? x.Code : parent.Code
                  let parentId = x.ParentID ?? x.ID
                  let isParent = x.ParentID == null ? 0 : 1
                  orderby parentIsMandatoryOrder, parentCode, parentId, isParent, x.Code
                  select x;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 2013-10-08
      相关资源
      最近更新 更多