[英]Complex Group By linq Query
I have a question... i have 3 tables... 我有一个问题...我有3张桌子...
user(id,name)
用户(ID,名称)
Answers(id,title)
答案(id,标题)
UserAnswers(id,user_id,right_answer_id,user_answer_id)
UserAnswers(id,user_id,right_answer_id,user_answer_id)
now i want to get user name and total score which is count(where (right_answer_id==user_answer_id)) * 10 so result can be like this 现在我想获取用户名和总得分为count(其中(right_answer_id == user_answer_id))* 10,因此结果可以像这样
UserName Score
用户名分数
Imran 20
伊姆兰20
john 30
约翰30
I don't have such experience in Linq. 我在Linq中没有这样的经验。 how can i do that?
我怎样才能做到这一点? i know in sql i can do like
我知道在SQL中我可以做
select u.Name,
sum (case
when q.Right_Anwer_id = q.user_answerr_id then 1
else 0
end)
from quiz q
inner join [User] u
on u.id = q.user_id
group by u.Name,
q.test_id
having q.test_id = 1
Classes: 类:
class Answer
{
public int Id { get; set; }
public string Title{ get; set; }
}
class User
{
public int Id { get; set; }
public string Name{ get; set; }
}
class UserAnswers
{
public int id { get; set; }
public int user_id { get; set; }
public int user_answer_id { get; set; }
public int right_answerr_id { get; set; }
public virtual Answer Answer { get; set; }
public virtual User User { get; set; }
}
If you also add a navigation property User.UserAnswers
you can use this query: 如果还添加导航属性
User.UserAnswers
,则可以使用以下查询:
from u in context.Users
where u.UserId == userid
select new
{
u.Name,
Score = u.UserAnswers
.Count(ua => ua.user_answerr_id == ua.right_answerr_id) * 10
}
I don't see a TestId
property in UserAnswer
(please use the singular name for the class), or anywhere, so this test_id = 1
condition in your SQL can't be applied in LINQ (yet). 我在
UserAnswer
(请为类使用单数名称)或任何地方都看不到TestId
属性,因此SQL中的test_id = 1
条件无法在LINQ中应用(尚未)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.