用户拥有UserClaims列表。
我发送用户claimType和claimValue作为参数。基于那些参数,我想删除所有用户声明(如果有的话)。
用户有索赔清单,每个索赔都有自己的用户,类型和价值。
public void RemoveClaim(User user, string type, string value)
{
var claimsRepository = repository.FindAll().ToList();
}
我想再次删除所有用户声明,其类型和值在方法中作为参数发送。
答案 0 :(得分:2)
这仅在“存储库”为List
时才有效,IEnumerable
是不够的,因为它没有添加/删除功能。
如果您符合这些条件,则只需RemoveAll
:
repositiory.RemoveAll(c => c.Type == type && c.Value == value);
否则,请将Where
与Remove
一起使用(同样需要支持Remove
功能):
foreach (UserClaim c in repositiory.Where(c => c.Type == type && c.Value == value).ToList())
repository.Remove(c);
答案 1 :(得分:1)
首先,您需要一个实现删除方法的集合,例如List。源集合必须以这种方式工作,只需使用source.ToList()。删除(...)只会从.ToList()生成的副本中删除
其次,你需要警惕在迭代时从集合中删除,因为这会导致抛出异常,并且在从集合中过滤数据时是一个非常常见的问题。避免这种情况的最好方法是对要删除的值集合调用.ToList()或.ToArray(),因为这会将它们呈现为一个集合。
foreach(var itemToRemove in repository
.Where(conditionMethod) // You can lambda here or call a method
.ToArray()) // Necessary to avoid mentioned exception
{ repository.Remove(itemToRemove); }