【问题标题】:Linq join between two Lists [closed]两个列表之间的Linq连接[关闭]
【发布时间】:2016-04-22 11:39:46
【问题描述】:

我是 Linq 的新手。我有一个要求,有两个列表,一个是学生列表,另一个是标记列表。在学生中,我们有 id、name 和在标记列表中 id(sid)、标记、主题。需要输出每个学生的学生证、姓名和总分。我已经接近了如下代码,

 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();

上面的 Linq 查询不符合我的要求。有什么建议吗?

【问题讨论】:

  • 请编辑您的问题以使代码缩进更具可读性 - 请注意,如果您为每个 Student 和 Marks 添加一个构造函数,并使用集合初始化器,您可以编写相同的代码 much 更具可读性和紧凑性。现在,实际输出是什么,您想要的输出是什么?请提供更多信息,而不仅仅是“不符合我的要求”。不要忘记 Stack Overflow 的目的是创建一个高质量问题和答案的存储库......

标签: c# linq


【解决方案1】:
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 - 该学生的总分
分数 - 该学生的分数列表

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多