Поскольку проект BindingListView<T>
использует .NET Framework v2.0 и предшествует LINQ, он не предоставляет IEnumerable<T>
для запроса.Поскольку реализует неуниверсальные IEnumerable
и неуниверсальные IList
, вы можете использовать Enumerable.Cast<TResult>
для преобразования коллекции в форму, подходящую для использования с LINQ.Однако этот подход не так полезен, потому что IEnumerable
, который возвращает AggregateBindingListView<T>
, является внутренней структурой данных типа KeyValuePair<ListItemPair<T>, int>
.
. Чтобы обновить этот проект для удобного использования с LINQ, самый простой подходбыть реализованным IEnumerable<T>
на AggregateBindingListView<T>
.Сначала добавьте его в объявление класса:
public class AggregateBindingListView<T> : Component, IBindingListView, IList, IRaiseItemChangedEvents, ICancelAddNew, ITypedList, IEnumerable<T>
, а затем внедрите его в конце определения класса:
#region IEnumerable<T> Members
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
for (int i = 0; i < _sourceIndices.Count; i++)
yield return _sourceIndices[i].Key.Item.Object;
}
#endregion
, и теперь вы можете использовать LINQ непосредственно на BindingListView<T>
экземпляр, подобный следующему:
// Create a view of the items
itemsView = new BindingListView<Item>(feed.Items);
var descriptions = itemsView.Select(t => t.Description);
Не забудьте обновить все проекты с .NET Framework v2.0 до .NET Framework 4 Client Profile и добавить using System.Linq;
, чтобы это работало с вашим текущим проектом.