实体框架 - 仅在与其他表匹配的记录时检索

时间:2017-12-02 10:46:20

标签: c# entity-framework linq entity-framework-core

标题有点令人困惑,但我想不出另一种说法。

因此,正如标题所说,我在ASP.NET应用程序中使用Entity Framework Core。我有一些与这个问题相关的表/模型(我将省略不相关的字段/属性):

Customer表:

public class Customer
{
    public int ID { get; set; }
    [MaxLength(100)]
    public string Name { get; set; }
}

Menu表:

public class Menu
{
    public int ID { get; set; }
    public int? ParentMenuID { get; set; }
    [MaxLength(50)]
    public string Name { get; set; }
}

CustomerMenu表:

public class CustomerMenu
{
    public int ID { get; set; }
    public int MenuID { get; set; }
    public int? CustomerID { get; set; }
}

我的目标是建立标准菜单结构(菜单记录在子/父关系中相互链接),但客户只能通过CustomerMenu表查看链接到的部分。

所以,我的问题是,获取与给定客户相关的子菜单记录的最佳方法是什么?

获取菜单的子菜单很简单 - 我可以使用以下代码执行此操作:

var childMenus = _context.Menu.Where(m => m.ParentMenuID == id);

但我只想通过CustomerMenu记录/模型返回链接到给定客户的菜单记录。

所以,我的问题是:有没有办法在一次调用中检索(检索与客户关联的子菜单记录),而无需手动循环浏览每个菜单记录并检查它是否已链接给客户?

感谢。

1 个答案:

答案 0 :(得分:1)

试试这个

(from a in context.Menu
               join c in context.CustomerMenu on a.ParentMenuID equals c.ID

               select a,c).ToList();