使用类RoleRecord(Guid RoleId,string RoleName,...)我正在尝试获取NameI的新列表,其中RoleId与Guid列表匹配
IEnumerable<RoleRecord> roles;
IEnumerable<Guid> roleIds;
我正在考虑避免使用嵌套for循环,以及:
var query =
from rowA in roles
join rowB in roleIds
on rowA.RoleId equals rowB.????
select { rowA.RoleName };
我也尝试将guid包装在一个类中,但是因为语法错误而无法构建它。 有任何想法吗? 感谢
答案 0 :(得分:5)
如果你有大量的Guids,我个人不会使用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;
优点是,您无需对每个角色的每个有效角色ID进行线性搜索。如果您知道您没有多个角色或角色ID,那么这不是问题,但通常哈希方法会更有效。
请注意,连接内部也会使用哈希值。
答案 1 :(得分:3)
尝试一下:
var query =
from rowA in roles
where roleIds.Contains(rowA.RoleId)
select rowA.RoleName;