我有一个需要按特定方式排序的对象列表。
相关的表格字段为:
我首先需要按IsMandatory = true排序,然后按Code排序,但是任何带有ParentID的东西必须按代码排序,但是在与ParentID具有相同ID的行之后直接出现(并且这些记录将始终将IsMandatory设置为NULL )。
一些示例数据,这也是订购时应该出现的顺序:
如何最好地在Linq to SQL orderby中完成?
答案 0 :(得分:1)
这很困难!
困难的原因源于您首先在Parents记录属性上进行排序,然后是实际记录属性。
我尽量让变量尽可能自我解释,但如果您有任何疑问,请询问!
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;