我已经创建了3个表关系(用户,项目,产品)
一个用户有很多项目,一个项目有很多产品(一对多)
我需要在用户登录时显示所有项目和包含的产品
我已经使用以下代码完成了此操作,但我认为这不是处理它的最佳方法。我需要做得更好
Week:-1 12-May-2019
Week:-2 19-May-2019
Week:-3 26-May-2019
Week:-4 02-Jun-2019
这很好,但是我需要以更好的方式做到这一点,而不是从头开始创建关系或使查询更好。
答案 0 :(得分:2)
您的模型包含项目每个端到产品一对多关系的导航属性。
这使您可以从项目开始查询,应用过滤器,然后使用集合导航属性和SelectMany
向下“导航”:
var modules = _adsDbContext.Project
.Where(x => x.UserID == userId)
.SelectMany(x => x.Products) // <--
.OrderBy(x => x.ProjectID).ThenBy(x => x.ModuleNumber)
.ToList<Modules>();
或者您可以从产品中开始查询,并使用参考导航属性来“导航”以应用过滤器:
var modules = _adsDbContext.Product
.Where(x => x.Project.UserID == userId) // <--
.OrderBy(x => x.ProjectID).ThenBy(x => x.ModuleNumber)
.ToList<Modules>();