using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
List<PayrunEmployee> employees = new List<PayrunEmployee>()
new PayrunEmployee() { BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 22, AlphabeticSort = "ChangP", FirstName = "Paydata", LastName = "Changed", },
new PayrunEmployee(){ BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 209, AlphabeticSort = "PatteM", FirstName = "Michele", LastName = "Patterson" },
new PayrunEmployee() { BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 208, AlphabeticSort = "PatteM", FirstName = "Michele", LastName = "Zadison"},
new PayrunEmployee(){ BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 23, AlphabeticSort = "zimmcc", FirstName = "Max", LastName = "Durant" },
new PayrunEmployee(){ BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 27, AlphabeticSort = "zimmdd", FirstName = "Phil", LastName = "Farmer"},
new PayrunEmployee(){ BaseWorkLocationName = "Dayton Restaraunt", EmployeeNumber = 27, AlphabeticSort = "zimmdd", FirstName = "Eve", LastName = "Ernest"},
new PayrunEmployee(){ BaseWorkLocationName = null, EmployeeNumber = 30, AlphabeticSort = "even", FirstName = "Eve", LastName = "Thompson"},
new PayrunEmployee(){ BaseWorkLocationName = null, EmployeeNumber = 31, AlphabeticSort = "even", FirstName = "Eve2", LastName = "Thompson2"},
new PayrunEmployee(){ BaseWorkLocationName = "10 Main Street", EmployeeNumber = 32, AlphabeticSort = "even", FirstName = "Eve3", LastName = "Thompson3"},
var orderedEmployees = employees
.OrderBy(l => l.BaseWorkLocationName == null)
.ThenBy(l => GetNumericPart(l.BaseWorkLocationName))
.ThenBy(l => l.BaseWorkLocationName)
.ThenBy(l => l.EmployeeNumber)
.ThenBy(l => l.AlphabeticSort)
.ThenBy(l => l.FirstName);
foreach(var employee in orderedEmployees)
Console.Write(employee.BaseWorkLocationName ?? "null");
Console.Write(employee.AlphabeticSort);
Console.Write(employee.EmployeeNumber);
Console.Write(employee.LastName);
Console.Write(employee.FirstName);
private static int GetNumericPart(string name)
if (int.TryParse(name?.Split(' ')[0], out int number))
public class PayrunEmployee
public string BaseWorkLocationName { get; set; }
public string AlphabeticSort { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public int EmployeeNumber { get; set; }