Indexing 映射/变换中的Distinct()
为了获得特定用户的所有权限,我正在创建以下索引。在转换中,Indexing 映射/变换中的Distinct(),indexing,mapreduce,distinct,ravendb,Indexing,Mapreduce,Distinct,Ravendb,为了获得特定用户的所有权限,我正在创建以下索引。在转换中,roles.SelectMany(x=>x.Permissions)可能包含重复项,因此我想在其上放置.Distinct()。但是,当我这样做时,它似乎被转换为Raven内部的Enumerable.Distinct(roles.SelectMany(x=>x.Permissions),而不返回任何结果。如果我直接在Raven中更改索引以使用.Distinct(),而不是Enumerable.Distinct(…),它就可以完美地工作 如何
roles.SelectMany(x=>x.Permissions)
可能包含重复项,因此我想在其上放置.Distinct()
。但是,当我这样做时,它似乎被转换为Raven内部的Enumerable.Distinct(roles.SelectMany(x=>x.Permissions)
,而不返回任何结果。如果我直接在Raven中更改索引以使用.Distinct()
,而不是Enumerable.Distinct(…)
,它就可以完美地工作
如何将其写成Raven中的正确译文
public class PermissionsByUser : AbstractIndexCreationTask<User, UserWithPermissions>
{
public override string IndexName
{
get
{
return "Users/PermissionsByUser";
}
}
public PermissionsByUser()
{
Map = users => from user in users
from role in user.Roles
select new {role.Id};
TransformResults = (database, users) => from user in users
let roles = database.Load<Role>(user.Roles.Select(x => x.Id))
select new
{
Id = user.Id,
Username = user.Username,
Password = user.Password,
Roles = user.Roles,
Permissions = roles.SelectMany(x => x.Permissions)//.Distinct()
};
}
}
public类权限用户:AbstractIndexCreationTask
{
公共重写字符串IndexName
{
得到
{
返回“Users/PermissionsByUser”;
}
}
公共许可证Yuser()
{
Map=users=>来自用户中的用户
来自user.Roles中的角色
选择新的{role.Id};
TransformResults=(数据库,用户)=>来自用户中的用户
让roles=database.Load(user.roles.Select(x=>x.Id))
选择新的
{
Id=user.Id,
Username=user.Username,
Password=user.Password,
角色=用户。角色,
Permissions=角色。SelectMany(x=>x.Permissions)/.Distinct()
};
}
}
我认为,这实际上只是一个陈旧结果的问题