似乎只有DataSet、DataTable和DataView可以在您想使用时用作源BindingSource.Find
。我将IQueryable和IEnumerable绑定到我的绑定源,但非常希望享受该BindingSource.Find
方法的“便利性”,而无需自己编写大量代码,因为时间至关重要。
有谁知道现有的实现,或者至少详细的“如何”文章可以帮助我实现这一目标?
似乎只有DataSet、DataTable和DataView可以在您想使用时用作源BindingSource.Find
。我将IQueryable和IEnumerable绑定到我的绑定源,但非常希望享受该BindingSource.Find
方法的“便利性”,而无需自己编写大量代码,因为时间至关重要。
有谁知道现有的实现,或者至少详细的“如何”文章可以帮助我实现这一目标?
您可以使用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));
}