将对象添加到BindingList中的BindingList

时间:2014-09-24 13:51:51

标签: c# linq list

我有一个活动的绑定列表,每个活动都有一个BuyOrders的绑定列表

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

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

我认为这样可行,但没有

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

3 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分: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());

答案 2 :(得分:2)

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

的结果类型
bindingListActivty.Select(k => k._dataGridViewId == 1);

IEnumerable<bool>