【问题标题】:linq join query get single record from second tablelinq join 查询从第二个表中获取单个记录
【发布时间】:2015-04-26 17:56:27
【问题描述】:

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

【问题讨论】:

    标签: c# sql-server linq


    【解决方案1】:
    ...
    join r in context.images
    on p.id equals r.studentId into imgs
    from r in imgs.Take(1)
    ...
    

    【讨论】:

    • 请为您的答案添加解释 - 我们中的许多人认为 just code 答案不完整。
    • 如果我想要最后一张图片怎么办:id name image 1 a1 2.jpg 2 b1 4.jpg
    【解决方案2】:

    你可以在这里写子查询:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2018-07-11
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多