首页 > 解决方案 > 使用 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

标签: c#sqlado.net

解决方案


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

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


推荐阅读