Reputation: 659
This is my code :
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
})
Is it possible to get correctAnswersCount value inside the select and use it for other variables? For example now i am calculating correctAnswersCount twice because above code doesn't work :
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(),
})
Upvotes: 0
Views: 644
Reputation: 37113
You can use an anoymous block of code like this:
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
}
})
Alternatively if you like the query-syntax more:
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
}
Upvotes: 3
Reputation: 1367
You can store any temporary results in variables into the body of lambda function, for example:
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
}
}
);
Upvotes: 1
Reputation: 12854
You can use a lambda function, in which you can calculate correctAnswersCount
before creating the anonymous object, and then use it for both properties:
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
};
});
Upvotes: 0
Reputation: 11964
You can use 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
}
});
Upvotes: 1