在 c# linq 中,是否可以在匿名选择中分配值
本文关键字:选择 分配 linq 是否 | 更新日期: 2023-09-27 18:37:02
这是我的代码:
userQuizzes = user.UserQuizes.OrderBy(uq => uq.VerbalQuizStartDate).Select(uq => new
{
correctAnswersCount = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count(),
incorrectAnswersCount = 80 - correctAnswersCount
})
是否可以在选择中获取正确的答案计数值并将其用于其他变量?例如,现在我正在计算两次正确答案计数,因为上面的代码不起作用:
userQuizzes = user.UserQuizes.OrderBy(uq => uq.VerbalQuizStartDate).Select(uq => new
{
correctAnswersCount = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count(),
incorrectAnswersCount = 80 - uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count(),
})
您可以使用像
这样的匿名代码块:
userQuizzes = user.UserQuizes.OrderBy(uq => uq.VerbalQuizStartDate).Select(uq =>
{
var corrAnswersCount = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count();
return new
{
correctAnswersCount = corrAnswersCount,
incorrectAnswersCount = 80 - corrAnswersCount
}
})
或者,如果您更喜欢查询语法:
userQuizzes = from quiz in user.UserQuizes
order by quiz.VerbalQuizStartDate
let count = quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count()
select new
{
correctAnswersCount = count,
incorrectAnswersCount = 80 - count
}
您可以使用 do:
userQuizzes = user.UserQuizes.OrderBy(uq => uq.VerbalQuizStartDate).Select(uq =>
{
var count = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count();
return new
{
correctAnswersCount = count,
incorrectAnswersCount = 80 - count
}
});
您可以将变量中的任何临时结果存储在 lambda 函数的主体中,例如:
userQuizzes = user.UserQuizes
.OrderBy(uq => uq.VerbalQuizStartDate)
.Select(uq =>
{
var count = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count();
//var temp2 = other calculations or something if You want...;
return new
{
correctAnswersCount = count,
incorrectAnswersCount = 80 - count
}
}
);
您可以使用 lambda 函数,在该函数中,您可以在创建匿名对象之前计算correctAnswersCount
,然后将其用于两个属性:
userQuizzes = user.UserQuizes.OrderBy(uq => uq.VerbalQuizStartDate).Select(uq => {
var correctAnswersCount = uq.Quiz.MathQuizes.Where(m => m.ISMovedAnswerCorrect).Count() + uq.Quiz.VerbalQuizes.Where(v => v.ISMovedAnswerCorrect).Count();
return new
{
correctAnswersCount = correctAnswersCount ,
incorrectAnswersCount = 80 - correctAnswersCount
};
});