使用Linq到SQL的困难排序顺序
我有一个需要按特定方式排序的对象列表 相关表格字段包括:使用Linq到SQL的困难排序顺序,linq,linq-to-sql,Linq,Linq To Sql,我有一个需要按特定方式排序的对象列表 相关表格字段包括: ID(int) IsMandatory(位) ParentID(int可为空) 代码(varchar) 我需要先按IsMandatory=true排序,然后按代码排序,但是任何具有ParentID的内容都必须按代码排序,但必须直接显示在具有与ParentID相同ID的行之后(并且这些记录将始终将IsMandatory设置为NULL) 一些示例数据,这也是它们在订购时的显示顺序: ID=1,IsMandatory=1,ParentID
- ID(int)
- IsMandatory(位)
- ParentID(int可为空)
- 代码(varchar)
- ID=1,IsMandatory=1,ParentID=NULL,Code=“A”
- ID=2,IsMandatory=NULL,ParentID=1,Code=“A”
- ID=3,IsMandatory=NULL,ParentID=1,Code=“B”
- ID=4,IsMandatory=1,ParentID=NULL,Code=“B”
- ID=5,IsMandatory=0,ParentID=NULL,Code=“C”
- ID=6,IsMandatory=NULL,ParentID=5,Code=“A”
- ID=7,IsMandatory=0,ParentID=NULL,Code=“D”
如何在Linq到SQL orderby中最好地实现这一点?这是一个困难的排序 困难的原因在于,您首先对父记录属性进行排序,然后对实际记录属性进行排序 我试着让变量尽可能自解释,但是如果你有任何问题,请提问
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;