2017-01-29 4 views
0

Ich habe eine Frage ... ich habe 3 Tabellen ...Komplexe Gruppe von Linq-Abfrage

Benutzer (id, name)

Antworten (id, title)

UserAnswers (id, user_id, right_answer_id, user_answer_id)

jetzt möchte ich Benutzernamen und ein Gesamtscore erhalten, die Zahl ist (wo (right_answer_id == user_an swer_id)) * 10 so ergeben sein kann wie dieses

Username Punkte

Imran 20

john 30

ich nicht eine solche Erfahrung in Linq haben. wie kann ich das machen? i in SQL wissen kann ich wie

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 

Klassen tun:

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

Sie fragen also, wie Sie eine 'Linq' Anweisung ausführen? Haben Sie bereits die 3 Tabellen, die Sie für die Abfrage benötigen? Wenn ja, fügen Sie bitte zu Ihrer Frage die Ergebnisse jeder Tabelle hinzu ... – Codexer

+0

bro ich habe dort Namen und Schema hinzugefügt –

+0

Wir brauchen den Code der Klassen, damit wir sehen, welche Navigationseigenschaften verwendet werden können. –

Antwort

1

Wenn Sie auch eine Navigationseigenschaft hinzufügen User.UserAnswers Sie diese Abfrage verwenden können:

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 
} 

ich nicht siehe eine TestId Eigenschaft in UserAnswer (bitte verwenden Sie den singulären Namen für die Klasse), oder irgendwo, so dass diese test_id = 1 conditio n in Ihrem SQL kann (noch) nicht in LINQ angewendet werden.

+0

Großartig, das ist, was ich suche, danke Kumpel. Abgesehen davon, wo es fast das Gleiche ist, was ich brauche –