I use the below code to sort `List<DataAccessViewModel>` list. 

Here is the sort order :

 1. `PriorityScore` 
 2. `MName` 
 3. `CName` 
 4. `FName`

It works as expected.

	public int Compare(DataAccessViewModel x, DataAccessViewModel y)
	{
		if (x == null || y == null)
		{
			return 0;
		}

		return x.CompareTo(y);
	}

	public int CompareTo(DataAccessViewModel mod)
	{
		int retval = (int)(this.PriorityScore?.CompareTo(mod.PriorityScore));
		if(retval != 0)
			return retval;
		else
		{
			retval = (this.MName ?? "zzzzzzzzzzzzz").CompareTo(mod.MName ?? "zzzzzzzzzzzzz");
			if (retval != 0)
				return retval;
			else
			{
				retval = (this.CName ?? "zzzzzzzzzzzzz").CompareTo(this.CName ?? "zzzzzzzzzzzzz");
				if (retval != 0)
					return retval;
				else
					retval = (this.FName ?? "zzzzzzzzzzzzz").CompareTo(this.FName ?? "zzzzzzzzzzzzz");
			}
		}
			
		return retval;
	}

But the code looks clunky to me. Is there any better way of doing it or is this it ?

Edit: here is the DataAccessViewModel with relevant properties

    public class DataAccessViewModel : IComparer<DataAccessViewModel>
    {
    	public string CName { get; set; }
    	public string MName { get; set; }
    	public string FName { get; set; }
    	public int? PriorityScore { get; set; }
    }