有一个查询:
const string query = @"
select *
from [Users] u
left join [UserRoles] ur
on [ur].[UserId] = [u].[UserId]
left join [Roles] r
on [r].[RoleId] = [ur].[RoleId]
left join [ExternalLogins] el
on [el].[UserId] = [u].[UserId];
";
这会映射到data
变量,即下一个类型的Array
:
UserRoleLoginRow {
Role = role,
User = user,
UserLoginInfoRow = userLogin
}
哪些输出数据应按User
分组,然后映射到User
实体:
public sealed class User : IUser<string>
{
public ICollection<UserLoginInfo> UserLoginInfos;
public ICollection<Role> Roles;
}
我可以使用此代码实现它:
var users = data.GroupBy(t => t.User, (key, value) => {
key.Roles = new Collection<Role>(value.Select(v=>v.Role).ToList());
return key;
});
但它看起来很乱,因为我必须自己创建集合,考虑转换和检查空引用(如果我从数据库中选择UserLoginInfoModel
然后想将其映射到UserLoginInfo
)
是否有更清洁的方法来实现这一目标(以及另一种方式)?
泰