using System.Collections.Generic;
public static void Main()
var list = new List<Category>{new Category{Id=1, Translations=new[]{new Translation{Locale="EN",Name="aaa"}, new Translation{Locale="RU",Name="zzz"}}},
new Category{Id=2, Translations=new[]{new Translation{Locale="EN",Name="ccc"}, new Translation{Locale="RU",Name="eee"}}},
new Category{Id=3, Translations=new[]{new Translation{Locale="EN",Name="bbb"}, new Translation{Locale="RU",Name="aaa"}}}};
var orderedList = list.OrderBy(x=>x,new CategoryComparer(sortByKey));
foreach(var item in orderedList)
Console.WriteLine($"ID={item.Id}");
public long Id { get; set; }
public Translation[] Translations { get; set; }
public string Locale { get; set; }
public string Name { get; set; }
public class CategoryComparer : IComparer<Category>
public CategoryComparer(string locale)
public int Compare(Category x, Category y)
var orderedX = x.Translations.Where(c=>c.Locale.Equals(_locale)).OrderBy(c=>c.Name);
var orderedY = y.Translations.Where(c=>c.Locale.Equals(_locale)).OrderBy(c=>c.Name);
return orderedX.First().Name.CompareTo(orderedY.First().Name);