C# Linq -带条件值的Order by并返回分组结果

2ic8powd  于 2023-03-27  发布在  C#
关注(0)|答案(2)|浏览(204)

我需要根据一个列从EF中对结果集进行排序,该列的某些值可能包含.。我希望结果按是否包含.进行分组,然后按名称排序。
给定列中的以下数据:

6010
6020
6.16.30
7030
6.16.40
7.15.20

带有.OrderBy(x =〉x.Column)的结果返回以下内容:

6.16.30
6.16.40
6010
6020
7.15.20
7030

然而,我想将每个包含.的结果分组,并像这样进行individually排序:

6.16.30
6.16.40
7.15.20
6010
6020
7030

如何使用Linq实现这一点?

m528fe3b

m528fe3b1#

这是一个possible solution

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var myList = new List<string>{"6010", "6020", "6.16.30", "7030", "6.16.40", "7.15.20"};
        var result = myList.Select(i => new { Item = i , Counter = i.Count(j => j == '.')}).OrderByDescending(i => i.Counter).ThenBy(i => i.Item).Select(i => i.Item).ToList();
        Console.WriteLine(string.Join('\n', result));
    }
}
uttx8gqw

uttx8gqw2#

我知道这个问题已经得到了回答。但我只是想分享另一种可能的解决方案:

var finalList = new List<string>();
var givenLst = new List<string> { "6010","6020","6.16.30","7030","6.16.40","7.15.20"};
finalList.AddRange(givenLst.OrderBy(_ => _).GroupBy(f => f.Contains(".")).SelectMany(t => t));

相关问题