Fik*_*man 5 c# linq sorting list
我相对较新LINQ,目前正在开发一个结合分组和排序的查询.我将从这里开始一个例子.基本上我有一个任意的数字序列表示为字符串:
List<string> sNumbers = new List<string> {"34521", "38450", "138477", "38451", "28384", "13841", "12345"}
Run Code Online (Sandbox Code Playgroud)
我需要sNumbers在此列表中找到包含搜索模式(例如"384")的所有内容,然后返回已过滤的序列,sNumbers以便首先对以搜索模式("384")开头的序列进行排序,然后对sNumbers包含搜索模式的剩余部分进行排序某处.所以它会是这样的(请注意组中的字母排序):
{"38450", "38451", "13841", "28384", "138477"}
Run Code Online (Sandbox Code Playgroud)
这是我开始的方式:
outputlist = (from n in sNumbers
where n.Contains(searchPattern
select n).ToList();
Run Code Online (Sandbox Code Playgroud)
所以现在我们拥有包含搜索模式的所有数字.这就是我被困的地方.我知道在这一点上我需要将结果"分组"成两个序列.一个以搜索模式开始,另一个不是.然后按字母顺序在每个组中应用辅助排序.如何编写一个结合了所有这些的查询?
这看起来相当简单,除非我误解了一些东西:
List<string> outputlist =
sNumbers
.Where(n => n.Contains("384"))
.OrderBy(n => int.Parse(n))
.OrderByDescending(n => n.StartsWith("384"))
.ToList();
Run Code Online (Sandbox Code Playgroud)
我明白了: