2016-04-01 9 views
0

In Linq ist es möglich, Variable in anonymous zu erhöhen auswählen?C# LINQ Inkrementieren Variable in anonymous Wählen Sie

Zum Beispiel dies ist mein Code:

int[] coefficients = { 1, 2, 3, }; 
    int i = 0; 

    var verbalResult = 
        from fq in finishedQuizzes 
        from vq in fq.Quiz.VerbalQuizes 
        group vq by vq.Question.ExamTagId into r 
        select new 
        { 
         Tag = r.First().Question.ExamTag.Name,     
         CorrectAnswerCount = r.Sum(e => e.ISMovedAnswerCorrect ? 1 : 0), 
         questionCount = r.Count(), 
         coefficient = coefficients[i], 
         i++ 
        }; 

Ich möchte Koeffizient erhalten durch den Index (i). Kann ich die i Variable wie folgt erhöhen?

+0

Haben Sie versucht es? –

+0

Warum nicht einfach 'i = verbalResult.Count()'? – Rob

+0

Aber ich möchte den Koeffizienten durch den Index dynamisch erhalten – user3857731

Antwort

4

Nein, das ist nicht möglich. Aber es gibt zwei Lösungen. Entweder Sie erhöhen i im Indexer.

[...] 
coefficient = coefficients[i++], 
[...] 

oder Sie verwenden den Indexer:

var verbalResult = .... into r select r; 
var result = verbalResult.Select((item,index) =>{ new { Tag = ... } /* index is the current position */} 

Beachten Sie IndexOutOfRangeException wenn i oder indexcoefficients.Length überschreitet

3

Es gibt Zeiten, wenn LINQ (die Sprache Bits) aren‘ t so hilfreich wie die verfügbaren Bibliotheksmethoden. Wenn Sie bei den Erweiterungsmethoden bleiben, gibt es eine Überlastung von Select, die Sie den Index übergibt. Also ... alles was du willst.

Grundsätzlich gilt:

.Select((x, i) => {...}) 

https://msdn.microsoft.com/en-us/library/bb534869(v=vs.100).aspx