使用左连接结果进行LINQ分组

时间:2016-08-19 15:33:39

标签: c# linq

如果我有这个清单

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,如何让每个人获得一行,将他的手机放在List和分页中?

我已经有一个查询,其结果类似于 PersonPhone 结果集,但我不知道如何按PersonId进行分组,然后将所有PhoneNumbers加入List和分页。例如,如果我想要一个页面大小为3,如果实际查询返回4行,如何进行sql查询以获取John Doe,Mary Jane和J. Watson及其手机?

注意:我不是(也不能)使用Entity Framework,我正在做的是和SQL填充 PersonPhone 列表的SQL查询,就像EF一样。

1 个答案:

答案 0 :(得分:1)

应用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()
                         }
                     );