在Linq中包含与实体查询无关的表

时间:2017-07-06 13:20:28

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

我有以下简化设置:

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;}
}

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

我正在尝试从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函数相同的方式生成结果。

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

我怀疑这不可能做到,但到目前为止我从谷歌的所有谷歌搜索都找不到明确的答案....

1 个答案:

答案 0 :(得分: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,即与一组userinfos加入的用户实体。

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

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