c# – 如何在嵌套的LINQ提供的集合中对项目进行排序

我有一个名为Category的(SQL Server)数据库表.

另一个名为SubCategory的数据库表.

SubCategory与Category具有外键关系.因此,感谢LINQ,每个Cateogory都有一个名为SubCategories的属性,当我抓住它时,LINQ非常适合返回与我的类别相关联的所有子类别.

如果我想按字母顺序对类别进行排序,我可以这样做:

return db.Categories.OrderBy(c => c.Name);

但是,我不知道如何在每个类别中订购SubCategories集合.

我的目标是返回一个类别集合,其中的所有SubCategory集合都按名称按字母顺序排序.

最佳答案 在这种情况下,我更喜欢使用扩展方法 – 因为它们可以很好地封装这个逻辑以供重用 – 而一个好的名称也可以帮助使逻辑易于发现.

例如,在我在MVC应用程序中使用L2S的项目中,我只是在我的Models文件夹中创建了一个名为Extensions的文件夹 – 然后我在每个模型/ 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的例子 – 但是你可以在任何地方应用它,因为你的想法就是用一种明确做你所追求的方法“装饰”你的对象,而你却不会制作额外的副本等.

点赞