Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有左连接结果的LINQ分组依据_C#_Linq - Fatal编程技术网

C# 具有左连接结果的LINQ分组依据

C# 具有左连接结果的LINQ分组依据,c#,linq,C#,Linq,如果我得到这份名单 个人电话 ------------------------------------------------------------ | **PersonId** |**Name** | **PhoneId** | **PhoneNumber** | ------------------------------------------------------------ | 1 | John Doe | 1 | 111-55-58

如果我得到这份名单

个人电话

------------------------------------------------------------
| **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; }
}
公共类PersonContactInfo{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表电话{get;set;}
}
有了LINQ,我怎样才能让每个人都有一行,他的手机在一个列表中,并且可以传呼

我已经有了一个查询,其结果类似于PersonPhone的结果集,但我不知道如何按PersonId分组,然后将所有电话号码加入列表,并进行分页。例如,如果我希望页面大小为3,如果实际查询返回4行,如何进行sql查询以获取John Doe、Mary Jane和J.Watson的手机


注意:我没有(也不能)使用实体框架,我所做的是和EF一样,使用sql查询来填充个人电话的列表。

应用
分组方式

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

如果我有更多的字段,我需要把所有这些字段放到分组中,如果这些字段的值与这两个字段的值相同,并且你想将这些属性保存为投影的一部分,我认为这样做很方便。另一种方法是,例如,
g.First().Name
获取组的第一个元素并获取所需的值谢谢,我使用First()跟踪了您的示例,现在它开始工作了。