SortedList = List.OrderBy(object1=> object1.Order.Split(';')[0])
.ThenBy(object2=> object2.Order.Split(';')[1])
.ThenBy(object3=> object3.Order.Split(';')[2])
.ToList();
订单的值不等于1; 1; 1。我在“;”分裂并排序元素。但是我得到了一个“字母顺序”。这意味着1,10,2,3。字符串格式不能为4位数字,因为该对象不是字符串。在LINQ中可以有自然顺序吗?
答案 0 :(得分:3)
您确定每个Object.Order
是一个冒号分隔的字符串,至少包含3个整数值?
为什么不将这三个值转换为整数并按解析后的值排序?
var result = myInputSequence.Select(sourceItem => new
{
SplitOrderNumbers = (sourceItem.Order.Split(';')
.Select(splitItem => Int32.Parse(splitItem))
.Take(3)
.ToList(),
OriginalSourceItem = sourceItem,
})
.OrderBy(item => item.SplitOrderNumbers[0])
.ThenBy(item => item.SplitOrderNumbers[1])
.ThenBy(item => item.SplitOrderNumbers[2])
.Select(item => item.OriginalSourceItem);
加分点:与您的解决方案不同,您只将订单拆分一次。
答案 1 :(得分:0)
您可以通过实现IComparer来自定义订购行为。请参阅:Microsoft Documentation。也就是说,我更喜欢Harald Coppoolse的回答。实际上,我也非常喜欢他的答案,我也喜欢linq语法:
var result = from n in myInputSequence
let split = n.Order.Split(';').
Select(splitItem => Int32.Parse(splitItem)).
Take(3).ToList()
orderby split[0], split[1], split[2]
select n;