我是linq的新手,遇到了这样一个场景,假设我有一个id(pk)和名称的"学生"表,以及一个id(pk),地址,studId(fk),城市和城市表,城市id(pk)和城市名称。现在学生可以在"地址"表中有多个地址,我想获得所有学生的结果与多个城市(应该是一个数组)名称作为学生实体的属性之一。就像在student对象中id,name,address,city[](城市数组)。
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,并且已经正确设置了导航属性。