![](/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.