复杂组由linq查询

时间:2017-01-29 14:27:06

标签: c# sql asp.net entity-framework linq

我有一个问题...... 我有3张桌子......

  

用户(ID,姓名)

     

答案(ID,标题)

     

UserAnswers(ID,USER_ID,right_answer_id,user_answer_id)

现在我想获得用户名和总分 count(其中(right_answer_id == user_answer_id))* 10 所以结果可能是这样的

  

用户名分数

     

Imran 20

     约翰30

我在Linq没有这样的经历。我怎样才能做到这一点? 我知道在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

类:

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; }
}

1 个答案:

答案 0 :(得分:1)

如果您还添加了导航属性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
}

我在TestId中看不到UserAnswer属性(请使用该类的单数名称),或者在任何地方,因此SQL中的test_id = 1条件可以&# 39;在LINQ(尚)中应用。