我有一个名为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的例子 – 但是你可以在任何地方应用它,因为你的想法就是用一种明确做你所追求的方法“装饰”你的对象,而你却不会制作额外的副本等.