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

How to prevent duplicate items from being added to an IRepository?

我使用 IRepositorysubjectscore 对存储在存储库中。现在我想弄清楚如何防止将重复的主题名称添加到该存储库中。

我尝试了以下解决方案,使用语句检查存储库是否已经 contains 主题名称:

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

但我收到一个过载不匹配错误,指出:

Error 1 The best overloaded method match for 'System.Collections.ObjectModel.Collection<LC_Points.Model.ScoreModel>.Contains(LC_Points.Model.ScoreModel) has some invalid arguments

Error 2 Argument 1: cannot convert from 'string' to 'LC_Points.Model.ScoreModel'

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

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

这是ScoreModel供参考:

http://hastebin.com/emagojojug.vala

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

所以,替换这部分:

!_repository.Collection.Contains(SelectedSubjectName)

来自

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

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