我正在研究.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);
}
答案 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