C# 在C中加入LINQ
我有下面的C代码C# 在C中加入LINQ,c#,linq,C#,Linq,我有下面的C代码 List<User> users = User.FindAll(); List<Role> roles = Role.FindAll(); 我正在尝试创建一个新的用户对象,该对象将为每个用户提供RoleIds和RoleNames。本质上,我想要一个新的用户对象,它将如下所示: User ---- UserId UserName Roles (RoleId, RoleName) 我需要在记忆中这样做。目前,我有以下几点: var results = (
List<User> users = User.FindAll();
List<Role> roles = Role.FindAll();
我正在尝试创建一个新的用户对象,该对象将为每个用户提供RoleIds和RoleNames。本质上,我想要一个新的用户对象,它将如下所示:
User
----
UserId
UserName
Roles (RoleId, RoleName)
我需要在记忆中这样做。目前,我有以下几点:
var results = (from user in users
select new
{
UserId = user.UserId,
UserName = user.UserName,
});
但是,我不知道如何添加Roles属性,以便只包含与每个用户关联的角色列表。我不知道如何使用roles变量进行连接。有没有办法让LINQ做到这一点?如果是,如何使用?使用Where
这假设RoleIds实际上是一个包含RoleIds的数组。如果不是这种情况,并且它是一个逗号分隔的RoleID字符串,那么您需要字符串。首先拆分它以创建角色ID数组,然后包含将具有预期的行为,即不匹配1与10。您尝试过以下方法吗:
创建一个类
Public Class tblUser
{
public string UserId {get; set;}
public string UserName {get; set;}
public string RoleIds {get; set;}
public string RoleName {get; set;}
}
var results = (from h in users
join n Role on h.RoleIds equal n.RoleId
select new tblUser
{
UserId = h.UserId,
UserName = h.UserName,
RoleName = n.RoleName
}
);
希望这会有帮助 我的建议是:重构数据库中的用户/角色关系,以便有三个表
User
-----
UserId
UserName
Role
-----
RoleId
RoleName
UsersInRoles
-----
UserId
RoleId
IsActive
然后,在Id列上具有从UsersInRoles到User以及从UsersInRoles到Role的外键关系。然后,在查询时,可以将所有三个表连接在一起以获得必要的信息,如下所示:
var results = (from u in Users
join uir in UsersInRoles on u.UserId equals uir.UserId
join r in Role on uir.RoleId equals r.RoleId
where uir.IsActive
select new
{
UserId = u.UserId,
UserName = u.UserName,
RoleName = r.RoleName
});
你有没有google linq加入?RoleIds是如何存储在用户表中的?这可能更像是架构问题……如果角色名称中存在数字,则此代码会导致问题。所有这些都取决于RoleID的存储方式,例如,假设您的角色列表中有10个ID为1-10的角色。如果RoleIds字段包含类似于5,Role1的内容,那么where子句将由角色1和5满足。或者,如果RoleIds字段包含10,RoleWhatever,它将返回角色1和10。是的,取决于RoleIds是什么。我假设一个数组,因为它是复数的,即已经与一个包含用户ID和角色ID的表连接,但如果它是逗号分隔的字符串,则需要先对其进行string.split。
User
-----
UserId
UserName
Role
-----
RoleId
RoleName
UsersInRoles
-----
UserId
RoleId
IsActive
var results = (from u in Users
join uir in UsersInRoles on u.UserId equals uir.UserId
join r in Role on uir.RoleId equals r.RoleId
where uir.IsActive
select new
{
UserId = u.UserId,
UserName = u.UserName,
RoleName = r.RoleName
});