В подобных случаях я предпочитаю использовать методы расширения - поскольку они отлично справляются с инкапсуляцией этой логики для повторного использования - и хорошее имя также может помочь легко обнаружить логику.
Например, в проектах, где я использовал L2S в приложениях MVC, я просто создаю папку в моей папке Models под названием Extensions - затем я добавляю туда методы 'extension' для каждой модели / класса L2S / etc (просто чтобы сохранить вещи организованы).
Тогда для этого случая я бы создал что-то вроде этого:
public static class CategoryExtensions
{
public static List<SubCategory> GetAlphabetizedSubCategories(this Category category)
{
return category.SubCategories
.OrderBy(sc => sc.Name)
.ToList();
}
}
А затем, например, из моего представления MVC, если я передам категорию в качестве модели, я мог бы просто сделать что-то простое, например:
<% foreach(SubCategory subCat in Model.GetAlphabetizedSubCategories()) { %>
<p>Stuff goes here... </p>
<% } %>
Это пример MVC, но вы можете применять его практически везде, поскольку идея состоит в том, что вы «украшаете» свой объект методом, который явно делает то, что вам нужно, и вы не делаете дополнительных копий. /так далее.