2014-09-24 73 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>