2016-04-22 14 views
-6

Ich bin neu bei Linq. Ich habe eine Anforderung, dort ist 2 Liste, eine ist Studentenliste und eine andere ist Markierungsliste. In Schüler haben wir ID, Name und in Mark-Liste ID (SID), Marken, Themen. Sie müssen als Student ID, Name und Gesamtnote für jeden Schüler herauskommen. Ich habe Code wie folgt angesprochen,Linq Join zwischen zwei Listen

class Student 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
} 

class Marks 
{ 
    public int Sid {get;set;} 
    public int mark {get;set;} 
    public string subjects {get;set;} 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     //student 
     List<Student> studentList = new List<Student>() 
     { 
      new Student() { Id = 1, name = "A" }, 
      new Student() { Id = 2, name = "B" } 
     }; 

     //marks 
     List<Marks> markList = new List<Marks>() 
     { 
      new Marks() { Sid = 1, mark = 30, subjects = "A1" }, 
      new Marks() { Sid = 1, mark = 40, subjects = "A2" }, 
      new Marks() { Sid = 2, mark = 40, subjects = "B1" }, 
      new Marks() { Sid = 1, mark = 50, subjects = "B2" } 
     }; 

     var result=(from stu in studentList 
        join mar in markList 
         on stu.Id equals mar.Sid        
        select new 
         { 
          stu.Id, 
          stu.name, 
          mar.mark, 
          mar.subjects 
         }) 
        .GroupBy(x => x.subjects).ToList(); 

Die obige Linq Abfrage nicht meine Anforderung erfüllt. Irgendwelche Vorschläge?

+1

Bearbeiten Sie Ihre Frage den Code mehr lesbar einrücken - und beachten Sie, dass, wenn Sie einen Konstruktor jeder Schüler hinzufügen und Marken, und verwenden Sie Auflistungsinitialisierer, könnten Sie den gleichen Code * viel * lesbarer und kompakter schreiben. Nun, was war die tatsächliche Ausgabe und was war Ihre gewünschte Ausgabe? Bitte geben Sie mehr Informationen als nur "nicht meine Anforderung erfüllt". Vergessen Sie nicht, dass der Zweck von Stack Overflow darin besteht, ein Repository mit qualitativ hochwertigen Fragen und Antworten zu erstellen ... –

+0

Verwenden Sie einen Join. Siehe Webseite: https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – jdweng

Antwort

0
var result = studentList 
      .Join(markList, m => m.Id, s => s.Sid, (s, m) => new { s, m }) 
      .GroupBy(t => t.s) 
      .Select(g => new 
      { 
       Student = g.Key, 
       MarksCount = g.Count(), 
       Marks = g.Select(x => x.m).ToList() 
      }) 
      .ToList(); 

MarksCount - Gesamtpunktzahl für diese Schüler
Marks - Liste der Marken für diese Schüler