连接IEnumerable(结构的)和IEnumerable(对象的)的Linq
使用类RoleRecord(Guid RoleId,string RoleName,…),我试图获得一个新的名称列表,其中RoleId与Guid列表匹配连接IEnumerable(结构的)和IEnumerable(对象的)的Linq,linq,join,linq-to-objects,Linq,Join,Linq To Objects,使用类RoleRecord(Guid RoleId,string RoleName,…),我试图获得一个新的名称列表,其中RoleId与Guid列表匹配 IEnumerable<RoleRecord> roles; IEnumerable<Guid> roleIds; 我也试图将guid封装在一个类中,但由于语法错误,甚至无法构建它。 有什么想法吗? 谢谢尝试一下: var query = from rowA in roles
IEnumerable<RoleRecord> roles;
IEnumerable<Guid> roleIds;
我也试图将guid封装在一个类中,但由于语法错误,甚至无法构建它。
有什么想法吗?
谢谢尝试一下:
var query =
from rowA in roles
where roleIds.Contains(rowA.RoleId)
select rowA.RoleName;
如果你有大量的guid,我个人不会使用Jeremy的答案。如果加入是您真正想要表达的,您只需要:
var query = from rowA in roles
join rowB in roleIds on rowA.RoleId equals rowB
select rowA.RoleName;
或者,首先创建一组角色ID:
HashSet<Guid> validRoleIds = new HashSet<Guid>(roleIds);
var query = from rowA in roles
where validRoleIds.Contains(rowA.RoleId)
select rowA.RoleName;
HashSet validRoleIds=新的HashSet(roleIds);
var query=来自角色中的行
其中validRoleIds.Contains(rowA.RoleId)
选择rowA.RoleName;
这样做的好处是,不需要对每个角色的每个有效角色ID进行线性搜索。如果您知道自己没有很多角色或角色ID,那么这不是一个问题,但通常哈希方法会更有效
请注意,连接在内部也将使用哈希。感谢您的回复,谢谢。我对linq很陌生,但越来越喜欢它。
HashSet<Guid> validRoleIds = new HashSet<Guid>(roleIds);
var query = from rowA in roles
where validRoleIds.Contains(rowA.RoleId)
select rowA.RoleName;