使用Entity Framework从2个表中返回数据

w00*_*w00 6 .net c# entity-framework

我正在使用MVC3和实体框架,但我来到了一个点,我需要来自不同表的更多数据.通常我会做这样的事情从表中获取数据:

Table: Users
id
username
Run Code Online (Sandbox Code Playgroud)

在代码中,我会做这样的事情来获得所有用户:

public static IEnumerable<Users> GetUsers( int userId )
{
    MyEntities ent = new MyEntities();

    return from g in ent.Users
           where g.OwnerUserId == userId
           select g;
}
Run Code Online (Sandbox Code Playgroud)

所以这会让我所有的用户回来.


但是用户可以加入一个组,我必须从特定组中获取所有用户名.

Table: userGroups
id
fk_user_id
fk_group_id
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用此代码:

public static IEnumerable<userGroups> GetUsersFromGroup( int groupId )
{
    MyEntities ent = new MyEntities();

    return from g in ent.userGroups
           where g.OwnerUserId == userId
           select g;
}
Run Code Online (Sandbox Code Playgroud)

现在显然这只返回"userGroups"表中的数据.但不知何故,我还需要Users表中的用户名.我怎样才能获得这些数据并仍然将我的"userGroups"作为IEnumerable返回?

在SQL中我只是做一个LEFT JOIN,但我无法弄清楚它是如何工作的.

Ari*_*ion 6

这样的事情可能是:

var query = from g in ent.userGroups
            join u in ent.Users on g.fk_user_id equals u.userID
            select new { g, u, });
Run Code Online (Sandbox Code Playgroud)

或者用 LEFT JOIN

var query = (from g in ent.userGroups
             from u in ent.Users.Where(a => a.fk_user_id == u.userID).DefaultIfEmpty()
             select new { g, u, });
Run Code Online (Sandbox Code Playgroud)