以下是我的員工類
public class Employee
{
public string ProjectName { get; set; }
public string EmployeeName { get; set; }
}
假設我有以下資料
var employees = new List<Employee>();
employees.Add(new Employee() { ProjectName = "NA", EmployeeName = "John" });
employees.Add(new Employee() { ProjectName = "NA", EmployeeName = "Adam" });
employees.Add(new Employee() { ProjectName = "Project2", EmployeeName = "Luis" });
employees.Add(new Employee() { ProjectName = "Project2", EmployeeName = "Rose" });
employees.Add(new Employee() { ProjectName = "Project1", EmployeeName = "Michael" });
employees.Add(new Employee() { ProjectName = "Project1", EmployeeName = "Duke" });
employees.Add(new Employee() { ProjectName = "Project3", EmployeeName = "Jacob" });
如上所示,很少有員工被分配到專案中,也很少有人沒有被分配(“NA”)。我的要求是按以下方式訂購這些員工
- 首先以員工姓名升序顯示所有未分配到任何專案的員工
- 然后顯示按每個專案排序的員工,并為每個專案按姓名升序顯示員工
上述示例的預期結果(同時列印專案名稱和員工姓名)。
NA -> Adam
NA -> John
Project1 -> Duke
Project1 -> Michael
Project2 -> Luis
Project2 -> Rose
Project3 -> Jacob
uj5u.com熱心網友回復:
你可以:
- 按和之間的相等排序
ProjectName"NA" - 然后,訂購
ProjectName - 然后,訂購
EmployeeName
示例實作:
var orderedEmployees = employees
.OrderByDescending(e => e.ProjectName == "NA") // First, show all employees who are not assigned to any project
.ThenBy(e => e.ProjectName) // Then show the employees ordered by each project
.ThenBy(e => e.EmployeeName) // ...with employee name in ascending order
.ToList();
該片段給出以下結果:
NA --> Adam
NA --> John
Project1 --> Duke
Project1 --> Michael
Project2 --> Luis
Project2 --> Rose
Project3 --> Jacob
示例小提琴在這里。
uj5u.com熱心網友回復:
var orderedEmployees = employees
.OrderByDescending(e => e.ProjectName == "NA")
.ThenBy(e => e.ProjectName)
.ThenBy(e => e.EmployeeName);
uj5u.com熱心網友回復:
Lambda 運算式對于這個問題應該綽綽有余
List<Employee> sortedEmployees = employees.OrderByDescending(x => x.ProjectName == "NA").ThenBy(x => x.ProjectName).ToList();
自己測驗它并使用您可以訪問的屬性x => x.Properties。
只有一條評論:注意空字串。你說你會有“NA”,但如果有任何空值,你的排序就會失敗。如果需要,您可以添加默認建構式或函式以將 "" 替換為 null。
uj5u.com熱心網友回復:
var sorted = employees
.OrderByDescending(e => e.ProjectName == "NA")
.ThenBy(e => e.ProjectName)
.ThenBy(e => e.EmployeeName);
uj5u.com熱心網友回復:
employees
.OrderByDescending(e => e.ProjectName == "NA")
.ThenBy(e => e.ProjectName);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514765.html
標籤:C#列表排序
