C# LINQ中的自然排序

C# LINQ中的自然排序,c#,linq,sorting,C#,Linq,Sorting,订单的值为off 1;1.1.我在“;”处拆分并对元素进行排序。但我有一个“字母顺序”。这意味着1,10,2,3。无法将字符串格式设置为4位数字,因为对象不是字符串。在LINQ中是否可以使用自然顺序?您确定每个对象的顺序都是由至少3个整数值组成的冒号分隔的字符串吗 为什么不将这三个值转换为整数并按解析的值排序 SortedList = List.OrderBy(object1=> object1.Order.Split(';')[0]) .

订单的值为off 1;1.1.我在“;”处拆分并对元素进行排序。但我有一个“字母顺序”。这意味着1,10,2,3。无法将字符串格式设置为4位数字,因为对象不是字符串。在LINQ中是否可以使用自然顺序?

您确定每个
对象的顺序都是由至少3个整数值组成的冒号分隔的字符串吗

为什么不将这三个值转换为整数并按解析的值排序

 SortedList = List.OrderBy(object1=> object1.Order.Split(';')[0])
                        .ThenBy(object2=> object2.Order.Split(';')[1])
                        .ThenBy(object3=> object3.Order.Split(';')[2])
                        .ToList();

另外一点:与您的解决方案不同,您只拆分订单一次。

您确定每个
对象。订单是至少由3个整数值组成的冒号分隔字符串吗

为什么不将这三个值转换为整数并按解析的值排序

 SortedList = List.OrderBy(object1=> object1.Order.Split(';')[0])
                        .ThenBy(object2=> object2.Order.Split(';')[1])
                        .ThenBy(object3=> object3.Order.Split(';')[2])
                        .ToList();

好处:与您的解决方案不同,您只需拆分一次订单。

您可以通过实施IComparer根据需要自定义订购行为。请参阅:。也就是说,我更喜欢Harald Coppoolse的答案。事实上,我非常喜欢他的答案,我也喜欢linq语法:

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);

通过实现IComparer,您可以根据需要自定义订购行为。请参阅:。也就是说,我更喜欢Harald Coppoolse的答案。事实上,我非常喜欢他的答案,我也喜欢linq语法:

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);

可能的重复可以选择()到元组(obj,int s0,int s1,int s2),然后按整数排序。可能的重复可以选择()到元组(obj,int s0,int s1,int s2),然后按整数排序。我正要发布这个减去单个拆分。我谦恭地收回并投票支持你更好的答案。从技术上讲,我认为基本的快速排序算法将重新发布这些拆分操作。我正要发布这个减去单个拆分。我谦恭地收回并投票支持你更好的答案。从技术上讲,我认为基本的快速排序算法将重新发布这些拆分操作