连接IEnumerable(结构的)和IEnumerable(对象的)的Linq

连接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

使用类RoleRecord(Guid RoleId,string RoleName,…),我试图获得一个新的名称列表,其中RoleId与Guid列表匹配

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;