linq join查询从第二个表中获取单个记录

时间:2015-04-26 17:56:27

标签: c# sql-server linq

我正在使用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>();
        }

2 个答案:

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