【问题标题】:Entity Framework - retrieve only if records that match in other table实体框架 - 仅在其他表中匹配的记录时检索
【发布时间】:2017-12-03 00:34:17
【问题描述】:

标题有点混乱,但我想不出另一种说法。

所以,正如标题所说,我在我的 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 记录/模型链接到给定客户的菜单记录。

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

谢谢。

【问题讨论】:

  • 所以你要join这两个表?
  • 查看 msdn 示例以进行加入:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
  • 嗯,是的,我正在尝试加入。但由于我首先在实体框架中使用代码,所以它与我习惯的有点不同。所以我想我在问如何从实体框架内进行连接。

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


【解决方案1】:

试试这个

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

               select a,c).ToList();

【讨论】:

  • 谢谢。我会试一试。
  • 谢谢。这几乎正​​是我想要的。我需要在 Menu 位中添加一个“where”子句,并将 join 语句更改为“a.ID 等于 c.MenuID”,但它似乎给了我想要的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2012-01-20
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多