C#Linq - 如何从List <string>中选择前5行分割第一个值

JL1*_*JL1 3 c# linq select

我可能用错误的方式表达了这一点,但我有一个基于分割的简单List我希望第一列中的最大值.

这是代码

   List<string> myString = new List<string>();
        myString.Add("100.02|apples|pears");
        myString.Add("22.02|apples|pears");
        myString.Add("99.02|apples|pears");
        myString.Add("88.02|apples|pears");
        myString.Add("77.02|apples|pears");
        myString.Add("66.02|apples|pears");
Run Code Online (Sandbox Code Playgroud)

我基本上拆分|然后将第一列转换为十进制.我希望获得最大的5行,这将排除22.02.我已经尝试过排序和排序,但他们不工作,因为字符串是不同的长度.

谢谢!

Rob*_*Rob 6

这将有效:

List<string> myString = new List<string>();
myString.Add("100.02|apples|pears");
myString.Add("22.02|apples|pears");
myString.Add("99.02|apples|pears");
myString.Add("88.02|apples|pears");
myString.Add("77.02|apples|pears");
myString.Add("66.02|apples|pears");

var res = myString.Select(s => new
{
    num = decimal.Parse(s.Split('|')[0]),
    str = s
}).OrderByDescending(g => g.num).Take(5).Select(s => s.str);
res.Dump();
Run Code Online (Sandbox Code Playgroud)

没有任何错误检查,但它给你的结果:

100.02 |苹果|梨
99.02 |苹果|梨
88.02 |苹果|梨
77.02 |苹果|梨
66.02 |苹果|梨