使用ADO.Net将多对多关系转换为单个类

时间:2018-07-05 14:49:49

标签: c# sql ado.net

我有ViewModel

UserGroup.cs

public class UserGroup
{
    public User User { get; set; }

    public List<Group> Groups { get; set; }
}

我想拥有User和所有相关的Groups。问题是,query返回的所有用户都有重复的副​​本,如果与他相关的组超过1个(当然是可以预期的)。我想到的第一件事是通过单个查询获取所有用户,然后让每个用户获取与他相关的组并将其推入列表。但是我正在寻找一种更好的方法(如果有)。

关系是与联结表建立的。

SQL查询

SELECT u.UserName, ug.GroupName FROM auth.UserUserGroup uug 
INNER JOIN [auth].[User] u ON u.UserId = uug.UserId 
INNER JOIN auth.UserGroup ug ON ug.UserGroupId = uug.UserGroupId

1 个答案:

答案 0 :(得分:0)

我敢肯定有人会提供更优雅的解决方案,但是我已经使用Linq多次构造了分层对象

var dbRecords = repository.Get(userId); // However you are getting your records, do that here
var result = dbRecords.GroupBy(x => x.UserId)
    .Select(g => new UserGroup
    {
        User = new User { UserName = g.First().UserName },
        Groups = g.Select(y => new Group { GroupName = y.GroupName }
    }
);

我尝试使用您的对象名称。希望我没有犯任何错误