匿名选择

时间:2016-04-01 11:47:48

标签: c# linq

在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变量吗?

2 个答案:

答案 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 */}
  

iindex超过coefficients.Length

时,请注意IndexOutOfRangeException

答案 1 :(得分:3)

有时LINQ(语言位)没有实际库方法那么有用。如果您坚持使用扩展方法,那么Select会超载递交您索引。所以...你想要的一切。

基本上:

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

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