![](/img/trans.png)
[英]C#: Search a list of defined queryable fields, different per model, with linq through generics (using entity framework)
[英]C# using Linq in Queryable
我对Linq有点陌生,希望有人可以帮助我解决当前遇到的问题。
我目前有2个清单
public IQueryable<TRole> Roles
{
get
{
var roles = new List<TRole>();
roles.Add(CreateIdentityRole("Chairman", "Voorzitter"));
roles.Add(CreateIdentityRole("Treasurer", "Penningmeester"));
roles.Add(CreateIdentityRole("Ranking Responsible", "Rankingverantwoordelijke"));
roles.Add(CreateIdentityRole("Competition Responsible", "Competitieverantwoordelijke"));
roles.Add(CreateIdentityRole("Webmaster", "Webbeheerder"));
roles.Add(CreateIdentityRole("Secretary", "Secretaris"));
foreach(TRole role in roles)
{
if (!_roles.Contains(role))
_roles.Add(role);
}
return _roles.AsQueryable<TRole>();
}
}
private TRole CreateIdentityRole(string id, string name)
{
TRole role = (TRole)Activator.CreateInstance(typeof(TRole));
role.Id = id;
role.Name = name;
return role;
}
public void InitializePrivacy(IdentityUser user)
{
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = new RoleStore<IdentityRole>();
var roles = roleManager.Roles;
List<string> userRoles = manager.GetRoles(user.Id);
}
现在,我想使用Linq获取在userRoles中找不到的所有角色。 因为角色是可查询的,所以我现在实际上并不是如何实现这种结果。
一个简单的.Except()
应该足够了:
using System.Linq;
//...
var roles = roleManager.Roles.ToList();
List<string> userRoles = manager.GetRoles(user.Id);
var ununsedRoles = roles.Execpt(userRoles);
这将为您提供所有项目角色,但userRoles
角色除外。
MSDN: https : //msdn.microsoft.com/zh-CN/library/bb300779(v = vs.110) .aspx
您可以使用IEnumerable接口。 如果您的方法返回Querable结果,它将起作用。 尝试这个:
IEnumerable<string> roles = roleManager.Roles;
List<string> userRoles = GetRoles(user.Id);
var result = roles.Except(userRoles);
要获取在userRoles
找不到的userRoles
:
var rolesNotFound = roleManager.Roles
.Where(r => !userRoles.Select(u => u.Id).Contains(r.Id))
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.