Я бы лично не использовал бы ответ Джереми, если у вас есть значительное количество гидов. Если объединение - это то, что вы действительно хотите выразить - вам просто нужно:
var query = from rowA in roles
join rowB in roleIds on rowA.RoleId equals rowB
select rowA.RoleName;
Либо сначала создайте набор идентификаторов ролей:
HashSet<Guid> validRoleIds = new HashSet<Guid>(roleIds);
var query = from rowA in roles
where validRoleIds.Contains(rowA.RoleId)
select rowA.RoleName;
Преимущество заключается в том, что вам не нужно выполнять линейный поиск по каждому действительному идентификатору роли для каждой роли. Это не проблема, если вы знаете , у вас мало ролей или идентификаторов ролей, но в целом подход к хешированию будет более эффективным.
Обратите внимание, что объединение будет также использовать внутренний хеш.