请查看以下方法:
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));
}
}
}
现在这个方法需要IEnumerable<Query>
并返回相同的内容。
实际上,此方法的功能可以应用于任何包含ID的IEnumerable<Type>
。
如何使用泛型重写此查询,以便可以使用另一个包含ID的Type调用它?
答案 0 :(得分:6)
只需将T
限制为包含ID
的类型:
internal IEnumerable<T> FilterOnUserInvolvement<T>(IEnumerable<T> input) where T : ISomeInterfaceWithId
{
}