Linq在自联接表上嵌套了select查询

时间:2013-01-30 13:09:21

标签: asp.net-mvc linq

我正在研究.Net MVC3项目。我有以下代码在同一个表上运行2个查询。第二个查询取决于第一个查询的结果。我如何重写这个以使用单个查询(使用嵌套查询)并将结果分配给我的viewmodel?

public ViewResult Category(string id)
{
    var viewModel = new ProductCategoryNavigation();

    viewModel.category = db.Category.Single(c=>c.NavigationId==id);
    viewModel.subCategories = db.Category.Where(i => i.ParentId == category.Id);

    return View(viewModel);
}

3 个答案:

答案 0 :(得分:3)

var query = (from c in db.Category.Where(x => x.NavigationId == id)
             join sc in db.Category on c.Id equals sc.ParentId into g
             select new {
                 Category = c,
                 SubCategories = g
             }).Single();


viewModel.category = query.Category;
viewModel.subCategories = query.SubCategories;

答案 1 :(得分:1)

如果存在将类别映射到类别的关系,则可以使用类似的内容。

viewModel.subCategories = db.Category.Single(c=>c.NavigationId==id).Category;

如果存在关系,你会看到这样的两个不同的现实:

Category.Category1 > return Category (parent)
Category.Category2 > return Collection of Category (children)

答案 2 :(得分:0)

我认为你可以尝试这样的事情。

viewModel.subCategories = from c in db.categories
                          join c1 in db.categories on c.Id = c1.ParentId 
                          where c.NavigationId = id
                          select c1