Существуют ли какие-либо известные реализации IBIndingList, которые поддерживают метод Find, подходящий для LINQ?
Кажется, как будто только DataSet, DataTable и DataView могут быть использованы в качестве источников, когда вы хотите использовать BindingSource.Find
, Я привязываю IQueryable и IEnumerable к своему источнику привязки, но очень хотел бы насладиться "удобством" BindingSource.Find
Метод, без написания стопки кода сам, так как время имеет существенное значение.
Кто-нибудь знает о существующей реализации, или, по крайней мере, подробную статью "как", которая может помочь мне достичь этого?
1 ответ
Решение
Вы можете использовать методы Type.GetProperty и Array.FindIndex для создания краткого метода расширения.
public static int Find<T>(this IEnumerable<T> items, string propertyName, Object key)
{
PropertyInfo property = typeof(T).GetProperty(propertyName);
if(property == null)
{
throw new ArgumentException(String.Format("Type {0} contains no property named \"{1}\". ",
typeof(T).Name, propertyName), "propertyName");
}
return Array.FindIndex(items.ToArray(), i => Object.Equals(property.GetValue(i, null), key));
}