您可以使用 LinQ 的表达式“OrderBy”。
在一个名为 listEmployees 的列表对象上,在列表顶部按 Answer == "No" 排序,代码如下所示:
list = list.OrderByDescending(x => x.Questions.First(y => y.Type == "Symptoms").Answer == "No").ToList();
也许您的代码中不需要 ToList() 函数。
这是一个包含您的列表和类的代码 sn-p:
Code Snippet
public static void Main()
{
var list = new List<Employee>()
{
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "Yes"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "No"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "No"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "No"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
},
new Employee
{
Questions = new List<Question>()
{
new Question() {Type = "Symptoms", Answer = "No"},
new Question() {Type = "Travel", Answer = "No"},
new Question() {Type = "Contact", Answer = "Maybe"},
new Question() {Type = "Test", Answer = "Yes"}
}
}
};
Console.WriteLine("----------BEFORE ORDERBY---------");
PrintEmployeeList(list);
Console.WriteLine("---------------------------------\n\n");
// You can change "Yes" to "No" if you want the "No" first.
list = list.OrderByDescending(x => x.Questions.First(y => y.Type == "Symptoms").Answer == "No").ToList();
Console.WriteLine("----------AFTER ORDERBY----------");
PrintEmployeeList(list);
Console.WriteLine("---------------------------------");
}
static void PrintEmployeeList(List<Employee> list)
{
foreach(Employee employee in list)
{
Console.WriteLine(employee.Questions[0].Answer);
}
}
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Question> Questions { get; set; }
}
public class Question
{
public int Id { get; set; }
public string Type { get; set; }
public string Answer { get; set; }
}