如何防止将重复项添加到IRepository?

时间:2015-10-31 17:22:34

标签: c# mvvm collections duplicates irepository

我已使用IRepository在存储库中存储subjectscore对。现在,我试图弄清楚如何防止重复的主题名称被添加到该存储库。

我尝试了以下解决方案,使用一个语句来检查repositry是否已经contains主题名称:

if (_repository.Count <= 5 && (!_repository.Collection.Contains(SelectedSubjectName))) 
{
    _repository.Add(new ScoreModel() {Subject = SelectedSubjectName, Points = SelectedPoints});
    CalculateLeavingCertPoints();
}

但是我收到一个重载不匹配错误,说明:

  

错误1&#39; System.Collections.ObjectModel.Collection&lt; LC_Points.Model.ScoreModel&gt; .Contains(LC_Points.Model.ScoreModel)的最佳重载方法匹配具有一些无效参数

  

错误2参数1:无法转换为&#39; string&#39;到&#39; LC_Points.Model.ScoreModel&#39;

有没有人知道如何修复语句参数?

我可以看到SubjectName是字符串类型,根据第二个错误不能作为参数传递。所以我尝试ScoreModel.Subject,但编译器不允许这样做。任何建议表示赞赏。

这是ScoreModel供参考:

http://hastebin.com/emagojojug.vala

1 个答案:

答案 0 :(得分:1)

如果_repository.Collection是ScoreModel对象的集合,则不能使用字符串执行包含。您需要使用要避免重复的特定属性进行检查。

所以,替换这部分:

!_repository.Collection.Contains(SelectedSubjectName)

通过

_repository.Collection.All(s=>s.Subject != SelectedSubjectName)

如果所有现有主题与新主题名称不同,则为真。 我相信这就是你所追求的目标。