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



我有ViewModel

用户组.cs

public class UserGroup
{
public User User { get; set; }
public List<Group> Groups { get; set; }
}

我想拥有User和所有相关Groups.问题是,如果有超过 1 个与他相关的组,query会返回所有用户的重复项(当然这是预期的(。我想到的第一件事是使用单个查询获取所有用户,然后为每个用户获取与他相关的组并将其推送到列表中。但我正在寻找一种更好的方法(如果有的话(来做到这一点。

该关系与连接表建立。

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

我相信有人会有一个更优雅的解决方案,但我多次使用 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 }
}
);

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

最新更新