我正在尝试找到一种巧妙的方法来查找符合特定条件的可观察集合中的所有值。对于这个让事情变得简单的例子,让我们说它的集合包含int,我试图找到大于5的所有项目。
我目前所知道的最好的方法就是这样
ObservableCollection<Int> findAllGreaterThanFive (ObservableCollection<Int> numbers)
{
ObservableCollection<Int> numbersGreaterThanFive;
foreach(Int number in numbers)
{
if (number > 5)
{
numbersGreaterThanFive.add(number);
}
}
return numbersGreaterThanFive;
}
显然忽略任何利用我正在寻找的事实的简单解决方案我需要一个适用于任何条件的任何类型的ObservableCollection的解决方案。我只是想知道是否用foreach循环检查每个项目,条件是最好的方法吗?
答案 0 :(得分:8)
您可以这样说:
var numbersGreaterThanFive = numbers.Where(x => x > 5);
答案 1 :(得分:6)
您可以使用System.Linq命名空间,使用语句using System.Linq
添加,之后您可以使用以下Where
方法。
ObservableCollection<int> list = new ObservableCollection<int>();
list.Where(i => i > 5).ToList();
您可以使用任何类型的对象,例如:
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
list.Where(i => i.ID > 10);
上面的代码返回ID大于10的DataItem。
如果您确定只有一条记录满足条件,您可以使用First()
方法,如:
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
list.First(i => i.ID == 10);
上面的代码返回ID为10的DataItem。但是如果没有ID = 10的记录,那么它将抛出异常。如果您不确定只有一条记录满足条件,请避免这种情况。您也可以使用FirstOrDefault()
方法。
ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
DataItem item = list.FirstOrDefault(i => i.ID == 10);
if(item != null)
{
//DoWork
}
如果没有ID = 10的记录,那么item将为null。