请看下面的方法:
internal IEnumerable<Query> FilterOnUserInvolvement(IEnumerable<Query> input)
{
var user = _userManager.GetUserByADName(_user.Identity.Name);
if (_userManager.IsUserAdministrator(user) || _userManager.IsUserStaff(user))
{
return input;
}
else
{
using (var context = new QAContext())
{
var involvedQueries = context.UserInvolvement.Where(x => x.UserID == user.ID).Select(x => x.QueryID).ToList();
return input.Where(i => involvedQueries.Contains(i.ID));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在这个方法获取IEnumerable<Query>并返回相同的内容.
实际上,此方法的功能可以应用于任何IEnumerable<Type>持有ID的功能.
如何使用泛型重写此查询,以便可以使用另一个包含ID的Type调用它?
只需将您限制T为包含ID以下内容的类型:
internal IEnumerable<T> FilterOnUserInvolvement<T>(IEnumerable<T> input) where T : ISomeInterfaceWithId
{
}
Run Code Online (Sandbox Code Playgroud)