У меня есть List<string>
как это
List<string> Test_List = new List<string>()
{
"ZZA-KG-TEST",
"ZZA-EG-TEST",
"ZZA-KL-10A",
"ZZA-KL-5A",
"ZZA-KL-1A",
"ZZA-FG-TEST",
"RO-ELEVER"
};
Ожидаемый вывод после сортировки
List<string> Test_List = new List<string>()
{
"ZZA-KL-1A",
"ZZA-KL-5A",
"ZZA-KL-10A",
"ZZA-KG-TEST",
"ZZA-FG-TEST",
"ZZA-EG-TEST",
"RO-ELEVER"
};
Что я на самом деле получаю это
List<string> Test_List = new List<string>()
{
"ZZA-KL-1A",
"ZZA-KL-5A",
"ZZA-KL-10A",
"RO-ELEVER"
"ZZA-EG-TEST",
"ZZA-FG-TEST",
"ZZA-KG-TEST",
};
Мой код такой
var data = Test_List
.OrderByDescending(i => i.Contains("-KL-"))
.ThenBy(i => i, new AlphanumericComparer())
.ThenByDescending(i => i.Contains("-KG-"))
.ThenBy(i => i, new AlphanumericComparer())
.ThenByDescending(i => i.Contains("-FG-"))
.ThenBy(i => i, new AlphanumericComparer())
.ThenByDescending(i => i.Contains("-EG-"))
.ThenBy(i => i, new AlphanumericComparer());
class AlphanumericComparer : IComparer<string>
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
static extern int StrCmpLogicalW(string s1, string s2);
public int Compare(string x, string y) => StrCmpLogicalW(x, y);
}
Есть мысли?
РЕДАКТИРОВАТЬ Мне нужны все элементы, содержащие -KL-
приходит в top и затем закажите их в -KL-
и то же самое для -KG-
, -FG-
и -EG-
, а затем для остальных