我正在创建以下索引,以获取特定用户的所有权限。在转换中,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()
};
}
}
我认为,这实际上只是一个过时的结果问题。回答 https://groups.google.com/forum/?fromgroups#!topic/ravendb/0hO8TOQicwc