我有一个类型为Test的列表
List<Test> testList = new List<Test>
{ new Test { TestName="gold", CriteriaOne = "sport", CriteriaTwo = "Outdoors" },
{ new Test { TestName="silver", CriteriaOne = "sport", CriteriaTwo = "Indoors" },
{ new Test { TestName="bronze", CriteriaOne = "activity", CriteriaTwo = "Water" },
{ new Test { TestName="gold", CriteriaOne = "activity", CriteriaTwo = "Outdoors" },
//some more tests ... };
我有一个每个标准的列表
// List of strings to order testListBy first.
List<String> criteriaOneOrder = new List<String> { "sport", "activity", "warmup", "other"};
//List of strings to order testListBy second.
List<String> criteriaTwoOrder = new List<String> { "OutDoors", "Indoors", "Water", "Other"};
我想首先根据criteriaOneOrder列表按类型测试列表排序然后如果两个结果相同,即。不止一项运动然后在第二根绳子上订购它们,以便在室内运动之前列出一项户外运动。
我尝试过使用Lambda表达式,使用OrderyBy函数和IndexOf来尝试重新排序列表但到目前为止还没有成功。
testList = testList.OrderBy(t => criteriaOneOrder.IndexOf(t.CriteriaOne)).ToList()
有什么想法吗?
答案 0 :(得分:1)
我会使用enumarations来完成此任务:
enum CriteriaOne
{
sport,
activity,
warmup,
other
}
enum CriteriaTwo
{
Outdoors,
Indoors,
Water,
Other
}
var orderedList = testList
.OrderBy(x => Enum.Parse(typeof (CriteriaOne), x.CriteriaOne))
.ThenBy(x => Enum.Parse(typeof (CriteriaTwo), x.CriteriaTwo))
.ToList();
如果您将属性的类型更改为枚举,则可以执行以下操作:
var orderedList = testList
.OrderBy(x => x.CriteriaOne)
.ThenBy(x => x.CriteriaTwo)
.ToList();
答案 1 :(得分:0)
IComparer<string>
的自定义实现,初始化它并将其作为LINQ OrderBy()
方法的第二个参数传递给你,你就可以了。