2017-02-07 4 views
0

Ich stehe vor einem seltsamen Problem, ich habe nicht viel mit C# programmiert und erst vor kurzem angefangen, also entschuldige ich mich im Voraus, wenn die Frage tatsächlich nur ein Anfängerfehler ist.Warum gibt meine LINQ-Abfrage immer 0 zurück?

int i = 0; 
var index = from x in (
       from v in Category.Items 
       select new { Key = i++, Value = v }) 
      where ((MenuCategory) x.Value).id == menuItems[items.SelectedIndex].category 
      select x.Key; 

Ich versuche, den Index eines bestimmten Objekts in Category.Items[] (wo das Feld ID ist ein spezifischer Wert, menuItems[items.SelectedIndex].category)

+1

ist es, weil der Index der Spalte 0 ist? Denken Sie daran, alles beginnt bei 0 – WhatsThePoint

+0

Richtig, aber wenn etwas anderes im Code nicht falsch ist, sollte der Index 1 für den Wert sein, den ich es mit – user1494162

+0

testen Wenn Sie den Index benötigen, können Sie Methodensyntax verwenden und es gibt eine Überladung von 'Select 'Das wird den Index im Lambda enthalten. https://msdn.microsoft.com/en-us/library/bb534869(v=vs.110).aspx – juharr

Antwort

5

LINQ-Abfragen Nebenwirkungen wie diese verursachen sollen nicht zu bekommen. Sie können bekommen, was Sie wollen mit Methodensyntax und die Überlastung von Select:

var selectedCatId = menuItems[items.SelectedIndex].category; 
var indexes = Category.Items 
    .Select((c, index) => new { Key = index, Value = c }) 
    .Where(x => ((MenuCategory)x.Value).id == selectedCatId) 
    .Select(x => x.Key); 
+0

das hat funktioniert, danke. Können Sie bitte erläutern, warum es keine gute Idee ist, LINQ-Abfragen mit Nebenwirkungen zu haben? – user1494162

+1

@ user1494162: Nun, Sie haben ein gutes Beispiel zur Verfügung gestellt. Abfragen sollen Informationen sammeln, die in einer oder mehreren Quellen bereitgestellt werden. Wenn diese Abfrage auch etwas ändert, hängt es oft davon ab, wie die Abfrage ausgeführt wird (zB wenn Sie ein 'OrderBy' oder' Where' haben und in welcher Reihenfolge sie erscheinen). Wenn jemand diese Logik ändert, ändert er vielleicht auch den Effekt, aber unwissentlich. –

+0

ah, das macht einen perfekten Sinn, danke. – user1494162

Verwandte Themen