特定のユーザーのすべての権限を取得するために、次のインデックスを作成しています。変換でroles.SelectMany(x => x.Permissions)
は、重複が含まれる可能性があるので、それを配置したいと思い.Distinct()
ます。しかし、Enumerable.Distinct(roles.SelectMany(x => x.Permissions)
そうすると、レイヴンの内部に翻訳されてしまい、結果が返ってこないようです。.Distinct()
の代わりに使用するようにRavenで直接インデックスを変更するとEnumerable.Distinct(...)
、完全に機能します。
レイヴンで正しく翻訳されるように、これをどのように書くことができますか?
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()
};
}
}