使用 Linq to SQL 的困难排序顺序
Posted
技术标签:
【中文标题】使用 Linq to SQL 的困难排序顺序【英文标题】:Difficult sort order with 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 中最好地实现这一点?
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于使用 Linq to SQL 的困难排序顺序的主要内容,如果未能解决你的问题,请参考以下文章