2014-09-24 13 views
5

ich eine Binding von Aktivität haben, und jede Aktivität hat eine Binding von BuyOrdershinzufügen Objekt zu einem Binding in einer Binding

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

Wenn ich richtig verstehe, ich die Aktivität auswählen kann, aber ich kann keine Methode zugreifen in der Aktivität. Wie kann ich auf die Methode zugreifen, ohne eine neue Instanz einer Bindungsliste zu erstellen?

tought ich dies funktionieren würde, aber

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

Antwort

3

konnte Sie nicht versuchen, diese ein:

// 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

Wählen Sie eine IEnumerable<T> zurückgibt, die nicht Ihre addBuyOrders Methode haben wird. Sie müssen entweder foreach verwenden oder Sie können FirstOrDefault mit einer Where-Klausel verwenden, um das einzelne Objekt abzurufen, das die Methode verfügbar macht.

Zum Beispiel:

foreach:

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

FirstOrDefault (das macht wahrscheinlich mehr Sinn auf der Grundlage Ihrer where-Klausel):

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

Es ist wichtig zu verstehen, dass IEnumerable<T>.Select() ist nicht zum Abfragen. Sie müssen Where(), First() oder FirstOrDefault() für alle Abfragen verwenden. Select() ist eine Projektion jedes Elements. Dies bedeutet, dass Sie eine Transformation von T1 -> T2 durchführen. Sie haben eine Projektion von jeder Aktivität über einen booleschen Wert Wert (k._dataGridViewId == 1) gemacht. Der Ergebnistyp von

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

ist

IEnumerable<bool>