在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)获得系数。我可以像这样增加i
变量吗?
答案 0 :(得分:4)
不,这是不可能的。但是存在两种解决方案。您可以在索引器中增加i
。
[...]
coefficient = coefficients[i++],
[...]
或您使用索引器:
var verbalResult = .... into r select r;
var result = verbalResult.Select((item,index) =>{ new { Tag = ... } /* index is the current position */}
当
时,请注意IndexOutOfRangeExceptioni
或index
超过coefficients.Length
答案 1 :(得分:3)
有时LINQ(语言位)没有实际库方法那么有用。如果您坚持使用扩展方法,那么Select
会超载递交您索引。所以...你想要的一切。
基本上:
.Select((x, i) => {...})
https://msdn.microsoft.com/en-us/library/bb534869(v=vs.100).aspx