【问题标题】:Include unrelated table in Linq to entity query在 Linq 中包含不相关的表到实体查询
【发布时间】:2023-03-26 22:56:01
【问题描述】:

我有以下简化设置:

Public User
{

  //Primary key
  public int Id {get;set;}

  public string Name {get; set;}
}

Public UserInfo
{

  //Primary key
  public int Id {get;set;}

  //Foreign key to user table
  public int userKey {get; set;}
}

表之间的关系是一个用户到多个用户信息

我正在尝试从user 表中进行选择并包含userInfo 表。

我不能这样做:

var users = Context.user.Include(u => u.userInfos);

因为用户表中没有对UserInfo 表的引用。

我可以这样做:

context.userInfo.include(x => x.user)

但是如果userInfo表中没有对应的条目,这将不会返回任何结果,这不是我想要的。此外,这将为每个 userInfo 返回一行,而我希望为用户提供一行,并将 userInfo 列表作为参数。

同样,我可以像这样加入表格:

var users = from us in Context.user
    join inf in Context.userInfo
    on us.Id equals inf.userKey
    select new //etc

但这也会为每个 userInfo 条目返回一行,与上面的问题相同。

总而言之,有没有一种方法可以包含此表以产生与 include 函数相同的结果。

我知道我可以调整我的设置以包含这个,但这不是我在这里要求的。

我怀疑这无法做到,但到目前为止,从我所有的谷歌搜索来看,我都无法找到明确的答案......

【问题讨论】:

  • 我猜User 有一个属性UserInfos 或类似的东西? (顺便说一句,帮自己一个大忙,并遵守命名约定,例如以大写开头的类和属性名称)。
  • 所以您正在寻找 linq 中的左连接?这是一个解决方案stackoverflow.com/questions/3404975/left-outer-join-in-linq

标签: c# linq include linq-to-entities entity


【解决方案1】:

我想要一行用户,以 userInfo 列表作为参数

我假设您的意思是作为 属性 的 userInfo 列表。我对您所要求的内容的理解是您正在寻找的内容:

var users = from us in Context.user
    join inf in Context.userInfo
        on us.Id equals inf.userKey into infg
    select new
    {
        User = us,
        UserInfos = infg
    };

join ... into 相当于一个GroupJoin,即一个用户实体加入了一组用户信息。

最好还是使用导航属性user.userInfos(不情愿地遵循您的命名约定):

var users = Context.user.Include(u => u.userInfos);

【讨论】:

  • 我已经编辑了这个问题来解释为什么我不能使用你建议的包含方法,但是你提出的第一个解决方案是有效的,所以谢谢你!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多