Существуют ли какие-либо известные реализации 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));       
}
Другие вопросы по тегам