如何从另一个表中获取基于ID的一个表数据

时间:2019-05-12 07:57:31

标签: c# entity-framework linq relationship

我已经创建了3个表关系(用户,项目,产品)

一个用户有很多项目,一个项目有很多产品(一对多)

我需要在用户登录时显示所有项目和包含的产品

我已经使用以下代码完成了此操作,但我认为这不是处理它的最佳方法。我需要做得更好

Week:-1 12-May-2019
Week:-2 19-May-2019
Week:-3 26-May-2019
Week:-4 02-Jun-2019

这很好,但是我需要以更好的方式做到这一点,而不是从头开始创建关系或使查询更好。

1 个答案:

答案 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>();
相关问题