2016-08-19 49 views
3

如果我得到這個列表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,哪能爲每個人獲取一行,他的手機在列表和分頁中?

我已經有一個查詢,其結果是像PersonPhone結果集,但我不知道如何按PersonId分組,然後將所有PhoneNumbers加入列表和分頁。例如,如果我想要三頁的頁面大小,如果實際查詢返回4行,如何進行sql查詢以獲得John Doe,Mary Jane和J. Watson的手機?

注意:我沒有(也不能)使用實體框架,我正在做的是和SQL查詢,它們填充了一個列表PersonPhone,就像EF一樣。

回答

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() 
         } 
        ); 
+0

如果我有更多的領域,我需要把所有這些領域進組的? –

+0

那麼,如果這些字段將具有與這兩個值相同的值,並且希望將這些屬性保存爲投影的一部分,則我認爲使用這種方法很方便。另一種方法可以做到,例如,'g.First()。Name'來獲得組的第一個元素並獲得您需要的值 – octavioccl

+0

謝謝,我遵循First()的示例,現在它正在工作。歡迎使用 –