c# - 使用 ADO.Net 将多对多关系转换为单个类
问题描述
我有ViewModel
用户组.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
解决方案
我相信有人会有更优雅的解决方案,但我已经多次使用 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 }
}
);
我尝试使用您的对象名称。希望我没有犯任何错误