2014-09-24 62 views
5

我有活动的的BindingList,每个活动都有BuyOrders的的BindingList添加对象到的BindingList中的BindingList

bindingListActivty.Select(k => k._dataGridViewId == 1); 

如果我理解正确的话,我可以选择的活动,但我不能访问任何方法在活动内部。如何在不创建绑定列表的新实例的情况下访问该方法?

我因子评分这会工作,但没有

bindingListActivty.Select(k => k._dataGridViewId == 1).addBuyOrders(new BuyOrders()); 

回答

3

你可以试试这个:

// Get the activity from bindingListActivity, whose k._dataGridViewId is equal to 1. 
var activity = bindingListActivty.SingleOrDefault(k => k._dataGridViewId == 1); 

// If the activity has been found and the a new BuyOrders object. 
if(activity!=null) 
    activity.addBuyOrders(new BuyOrders()); 
5

选择返回IEnumerable<T>,不会有你的addBuyOrders方法。您需要使用foreach或者可以使用FirstOrDefaultWhere子句来获取公开该方法的单个对象。

例如:

的foreach:

var activities = bindingListActivty.Select(k => k._dataGridViewId == 1); 
foreach(var a in activities) 
{ 
    a.addBuyOrders(new BuyOrders()); 
} 

FirstOrDefault(这可能使基于您的where子句中更有意义):

var activity = bindingListActivty.Where(k => k._dataGridViewId == 1).FirstOrDefault(); 
if (activity != null) 
{ 
    activity.addBuyOrders(new BuyOrders()); 
} 
2

为您了解这一点很重要IEnumerable<T>.Select()不是为了查询。对于任何查询,您都需要使用Where(),First()或FirstOrDefault()。 Select()是每个元素的投影。这意味着您正在执行从T1 - > T2的转换。您已对布尔型值(k._dataGridViewId == 1)进行了每个活动的投影。的

bindingListActivty.Select(k => k._dataGridViewId == 1); 

结果类型是

IEnumerable<bool>