我正在使用linq join从两个表中获取数据。但我的第二个表有多个记录对应第一个表。我只想要第二张桌子的第一张唱片。
Table student
id name
1 a1
2 b1
Table images
id image studentId
1 1.jpg 1
2 2.jpg 1
3 3.jpg 2
4 4.jpg 2
Result should be
id name image
1 a1 1.jpg
2 b1 3.jpg
我正在使用以下代码。并且它返回了四个记录。
public IEnumerable<StudentBean> getStudent()
{
return (from p in context.student
join r in context.images
on p.id equals r.studentId
select new StudentBean
{id=p.id,
name =p.name,
image=r.image
}).ToList<StudentBean>();
}
答案 0 :(得分:5)
...
join r in context.images
on p.id equals r.studentId into imgs
from r in imgs.Take(1)
...
答案 1 :(得分:1)
你可以在这里写子查询:
return (from p in context.student
select new StudentBean
{
id=p.id,
name =p.name,
image=(from r in context.images
where r.studentId == p.id
select r).First().image
}).ToList<StudentBean>();
或者如果有可能在Images表中没有匹配行,那么你需要以这种方式解决Null Reference Exeption:
return (from p in context.student
let Image = (from r in context.images
where r.studentId == p.id
select r).FirstOrDefault()
select new StudentBean
{
id=p.id,
name = p.name,
image = Image != null ? Image.image : null
}).ToList<StudentBean>();