Linq加入两个列表
问题描述:
我是Linq的新手。我有一个要求,有2个列表,一个是学生名单,另一个是标记列表。在学生中,我们有身份证,姓名和标记清单ID(sid),标记,科目。每个学生需要输入学号,姓名和总分数。我已经接近代码如下,Linq加入两个列表
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查询不符合我的要求。有什么建议么?
答
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 - 总标记为这个学生
标志 - 并请注意,如果你添加一个构造每个学生的 - 这个学生
请编辑您的问题其可读性缩进代码标记列表和标记,并使用集合初始值设定项,您可以编写相同的代码*更*更易读和紧凑。现在,实际产出是多少?你想要的产出是多少?请提供更多信息,而不仅仅是“不符合我的要求”。不要忘记,堆栈溢出的目的是创建一个高质量的问题和答案的存储库... –
使用连接。请参阅网页:https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – jdweng