不,不幸的是,这是不可能的。虽然给定一个特定的数据源,这样的搜索可能会相当简单,但以更通用的方式(就像BindingSource那样)进行搜索不太透明。一方面,语法不太明显。这是一个有点人为的解决方案:
public class Key
{
    public string PropertyName {get; set;}
    public object Value {get; set;}
}
public static int Find(this BindingSource source, params Key[] keys)
{
    PropertyDescriptor[] properties = new PropertyDescriptor[keys.Length];
    ITypedList typedList = source as ITypedList;
    if(source.Count <= 0) return -1;
    PropertyDescriptorCollection props;
    if(typedList != null) // obtain the PropertyDescriptors from the list
    {
        props = typedList.GetItemProperties(null);
    }
    else // use the TypeDescriptor on the first element of the list
    {
        props = TypeDescriptor.GetProperties(source[0]);
    }
    for(int i = 0; i < keys.Length; i++)
    {
        properties[i] = props.Find(keys[i].PropertyName, true, true); // will throw if the property isn't found
    }
    for(int i = 0; i < source.Count; i++)
    { 
        object row = source[i];
        bool match = true;
        for(int p = 0; p < keys.Count; p++)
        {
            if(properties[p].GetValue(row) != keys[p].Value))
            {
                match = false;
                break;
            }
        }
        if(match) return i;
    }
    return -1;
}
你可以这样称呼它:
BindingSource source = // your BindingSource, obviously 
int index = source.Find(
    new Key { PropertyName = "PetType", Value = "Dog" },
    new Key { PropertyName = "Gender", Value = "M" });
请记住,要使其可用,您确实需要一个更智能的比较算法,但我将把它作为练习留给读者。检查实现IComparable将是一个好的开始。尽管如此,无论具体实施点如何,这个概念都应该贯彻执行。
请注意,这不会利用基础数据源可能实现的任何可能的性能优化,而单列Find可以。