C# 如何使用linq查询多个表

C# 如何使用linq查询多个表,c#,linq,C#,Linq,我是linq的新手,陷入了一个场景,比如说,我有一个id(pk)和名称的“学生”表,还有一个id(pk)、地址、studId(fk)、城市和城市id(pk)和城市名称的“地址”表。现在学生可以在“Address”表中有多个地址,我想得到所有学生的多个城市(应该是一个数组)名称的结果,作为学生实体的属性之一。类似于学生对象中的id、名称、地址、城市[](城市数组)。student.addresses=address.Where(x=>x.studId==student.id).toList() 这

我是linq的新手,陷入了一个场景,比如说,我有一个id(pk)和名称的“学生”表,还有一个id(pk)、地址、studId(fk)、城市和城市id(pk)和城市名称的“地址”表。现在学生可以在“Address”表中有多个地址,我想得到所有学生的多个城市(应该是一个数组)名称的结果,作为学生实体的属性之一。类似于学生对象中的id、名称、地址、城市[](城市数组)。

student.addresses=address.Where(x=>x.studId==student.id).toList()

这或多或少是你想要做的,查询你的地址表,在那里你匹配学生id,然后你可以循环通过你的地址,并选择城市,这也会给你更多的信息

var students=db.Students.Select(s=>new {
  s.id,
  s.name,
  s.Addresses,
  Cities=s.Addresses.Select(a=>a.City.Name).ToList()
});
当然,你可以选择学生

var students=db.Students
  .Include(s=>a.Addresses)
  .Include(s=>a.Addresses.City);
然后,如果你需要知道学生所在的城市,应该是:

foreach(var student in students)
  Console.WriteLine("{0} lives in {1}",
    student.Name,
    String.Join(", ",student.Addresses.Select(a=>a.City.Name)));

以上假设您使用的是EntityFramework,并且导航属性设置正确。

谢谢!下面的答案完全符合我的情况。