使用左连接结果进行LINQ分组
本文关键字:LINQ 分组 结果 连接 | 更新日期: 2023-09-27 18:03:05
如果我有这个列表
PersonPhone
------------------------------------------------------------
| **PersonId** |**Name** | **PhoneId** | **PhoneNumber** |
------------------------------------------------------------
| 1 | John Doe | 1 | 111-55-5855 |
------------------------------------------------------------
| 1 | John Doe | 2 | 111-55-5521 |
------------------------------------------------------------
| 2 | Mary Jane| 3 | 254-565-855 |
------------------------------------------------------------
| 3 | J. Watson| NULL| NULL|
------------------------------------------------------------
我需要映射到这个对象:
public class PersonContactInfo {
public int Id { get; set; }
public string Name { get; set; }
public List<string> Phones { get; set; }
}
使用LINQ,我如何获得每个人的一行,将他的电话放在一个列表中并分页?
我已经有一个查询,其结果类似于PersonPhone结果集,但我不知道如何按PersonId分组,然后将所有phonenumber加入到列表中,并分页。例如,如果我希望页面大小为3,如果实际查询返回4行,如何使用sql查询获取John Doe, Mary Jane和J. Watson的手机?
注意:我不是(也不能)使用实体框架,我正在做的是和sql查询填充PersonPhone列表,就像EF一样。
应用group by
:
var query= PersonPhoneSet
.GroupBy(p=>new {p.PersonId, p.Name})
.Select(g=> new PersonContactInfo
{
Id=g.Key.PersonId,
Name=g.Key.Name,
Phones= g.Select(p=>p.PhoneNumber).ToList()
}
);