2016-04-01 7 views
0

linqでは、匿名のselect変数内で​​変数をインクリメントすることは可能ですか?私は、インデックス(i)で係数を取得したいC#linqインクリメント変数を匿名で選択

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++ 
        }; 

は、例えば、これは私のコードです。このような変数iを増やすことはできますか?

+0

は、あなたがそれを試してみましたか? –

+0

'i = verbalResult.Count()'だけではないのはなぜですか? – Rob

+0

しかし、私はインデックスで係数を動的に取得したい – user3857731

答えて

4

これは不可能です。しかし、2つの解決策が存在する。インデクサーでiを増分してください。

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

か、インデクサーを使用します。

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

iindexcoefficients.Length

3

LINQ(言語・ビット)が上がらない時間が」ありを超えた場合にIndexOutOfRangeExceptionの点に注意してください。利用可能な実際のライブラリメソッドと同様に役立ちます。あなたが拡張メソッドに固執するならば、のオーバーロードがあります。があなたにのインデックスを渡します。だから...あなたが望むものすべて。

基本的には:

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

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