如何检查ObservableCollection是否有重复数据?

时间:2012-03-12 10:39:35

标签: asp.net wpf

我有一个连接到数据网格的集合ItemDemandCollection。如果用户输入相同的数据,则警报消息需要显示重复的数据。

我该如何处理?

3 个答案:

答案 0 :(得分:1)

尝试对输入的数据使用 ICollection.Contains(T)。 详细了解Collection.Contains Method

答案 1 :(得分:0)

您在数据网格中输入了哪些数据?你的每个项目是什么类型的?

E.g。您可能绑定了Employee类的实例集合,并在数据网格上显示了Employee ID和Name作为列。

如果是这样,EmployeeName属性或EmployeeID属性可能会发生重复。但是,EmployeeName上的重复项可以被允许,因为任何两名员工都可以拥有相同的Name。但是不允许使用相同的ID。

因此,当输入ID并且您失去焦点时,该项目会被添加,并且会引发ObservableCollection.CollectionChanged事件。处理此事件并在处理程序中,您可以检查“e.Action == Add”,如果是,则对现有项执行lambda查询,并在ID属性中检查输入的值....

 if (e.Action == NotifyCollectionChangedAction.Add 
    && MyItems.Where(
         item => item.EmployeeID == e.NewItems[0].EmployeeID).Count() > 1)
 {
     //Duplicates found!
 }

如果这对您没有帮助,请详细说明您的要求。

答案 2 :(得分:0)

尝试在WinRT中做类似的事情,这对我有用,我认为它也适用于WPF。类似于WPF-它的答案,或多或少。这假定您拥有的每个数据项都有一些唯一ID(或任何唯一值),并且所有项目(在集合中以及您要添加的内容)都具有相同的唯一ID字段。

var duplicates = yourCollectionOfItems.Where((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID);

if (duplicates.Any()) throw new SomeDuplicateException(); 
// And/or show your alert dialog, in this case.

“if(duplicates.Any())”与“if(duplicates.Count()> 0)”相同。

也可以使用“duplicates”变量链接到一行; e.g。

if (yourCollectionOfItems.Any((item) => item.UniqueID == itemYouAreAboutToAddToCollection.UniqueID))
{ 
    // Do error handling here.
}