我正在开发一个电子商务网站,我使用三个表来管理产品和类别。
我需要一个或多个带有实体框架的 linq 查询来获取母分类列表、子分类列表和相关产品列表。
有一个类别表,例如:
身份证 名字猫 父 ID
有一个产品表,例如:
身份证 名称 居住 信息等
有一个产品类别表,例如:
身份证 类别标识 产品编号 排序顺序
这是我的视图模型
public class CatViewModel
{
public int IdCat { get; set; }
public string NameCat { get; set; }
public int ParentId { get; set; }
public List<CatViewModel> Children { get; set; }
public List<Product> Products { get; set; }
}
很明显,每个父类都必须有其所有子类的完整产品列表
答案 0 :(得分:0)
您走在正确的轨道上。在应该使用此 CatViewModel 返回视图的方法中,您可以执行以下操作:
var mainObject = Context.Category.FirstOrDefault(x => x.IdCat == "YOUR PARAMETER OF ID HERE");
var viewModel = new CatViewModel
{
IdCat = mainObject.IdCat,
NameCat = mainObject.NameCat,
ParentId = mainObject.ParentId,
Children = Context.Children(query here).ToList(),
Products = Context.Products(query here).ToList()
};
解决方案 2:
您可以先创建:
var listChildern = Context.Children(query here).ToList();
var listProducts = Context.Products(query here).ToList();
然后返回您填充的视图模型,如下所示:
var mainObject = Context.Category.FirstOrDefault(x => x.IdCat == "YOUR PARAMETER OF ID HERE");
var viewModel = new CatViewModel
{
IdCat = mainObject.IdCat,
NameCat = mainObject.NameCat,
ParentId = mainObject.ParentId,
Children = listChildern ,
Products = listProducts
};
答案 1 :(得分:0)
我有三张桌子。 我需要一个 CatViewModel 列表类型模型,我试过了:
var cats = db.Cats.AsEnumerable() // <-- Force full execution (loading) of the above
.Where(e => e.ParentId == null) // <-- then apply the root filter
.ToList();
var myList = cats.Select(c => new CatViewModel {
IdCat = c.IdCat,
NameCat = c.Nomecat,
Children = c.Children,
Products = ???
}).ToList();