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,以下查询返回的类型是什么: var photos = job.Photos.GroupBy(x => x.Location) .Select(group => new { Name = group.Key, Photos = group.OrderByDescending(x => x.DateAdded) })

以下查询返回的类型是什么:

var photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            new
            {
                Name = group.Key,
                Photos = group.OrderByDescending(x => x.DateAdded)
            })
        .OrderBy(group => group.Name)
        .ToList();       
根据调试器,其类型为:

'System.Collections.Generic.List<<anonymous type: string Name, System.Linq.IOrderedEnumerable<Project.Models.Photo> Photos>>'
'System.Collections.Generic.List'
但是我不知道如何声明这个类型

我试过了

public List<string, IOrderedEnumerable<Photo>> Photos {get; set;)
公开列表照片{get;set;)

但是列表只能包含一个元素,正如调试器所说,它是匿名类型。这意味着您不能写入它的名称,因为它没有名称。您可以做的是创建一个新类并在查询中使用它:

List<PhotosGroup> photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            new PhotosGroup
            {
                Name = group.Key,
                Photos = group.OrderByDescending(x => x.DateAdded)
            })
        .OrderBy(group => group.Name)
        .ToList();

正如调试器所说,它是匿名类型。这意味着您不能写入它的名称,因为它没有名称。您可以做的是创建一个新类并在查询中使用它:

List<PhotosGroup> photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            new PhotosGroup
            {
                Name = group.Key,
                Photos = group.OrderByDescending(x => x.DateAdded)
            })
        .OrderBy(group => group.Name)
        .ToList();

如果您不想创建另一个类,请使用Dictionary将字符串键和照片列表作为值保存,以保存此信息

IDictionary<string, List<Photo>> photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            new
            {
                Name = group.Key,
                Photos = group.OrderByDescending(x => x.DateAdded)
            })
        .OrderBy(group => group.Name)
        .ToDictionary(kv=>kv.Name, kv=>kv.Photos.ToList());
IDictionary photos=job.photos.GroupBy(x=>x.Location)
.选择(组=>
新的
{
Name=group.Key,
照片=group.OrderByDescending(x=>x.DateAdd)
})
.OrderBy(group=>group.Name)
.ToDictionary(kv=>kv.Name,kv=>kv.Photos.ToList());

如果不想创建另一个类,只需保存这些信息,就可以使用Dictionary将字符串键和照片列表作为值保存

IDictionary<string, List<Photo>> photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            new
            {
                Name = group.Key,
                Photos = group.OrderByDescending(x => x.DateAdded)
            })
        .OrderBy(group => group.Name)
        .ToDictionary(kv=>kv.Name, kv=>kv.Photos.ToList());
IDictionary photos=job.photos.GroupBy(x=>x.Location)
.选择(组=>
新的
{
Name=group.Key,
照片=group.OrderByDescending(x=>x.DateAdd)
})
.OrderBy(group=>group.Name)
.ToDictionary(kv=>kv.Name,kv=>kv.Photos.ToList());

您有两个选项:

  • 您可以创建类来保存分组键和与其关联的值集合,并创建该类的实例而不是匿名类型
  • 您可以将
    字典
    一起使用
    IOrderedEnumerable

我会在OrderByDescending之后添加一个额外的
ToList
调用,以防止只对项目进行一次解析和排序。

您有两个选项:

  • 您可以创建类来保存分组键和与其关联的值集合,并创建该类的实例而不是匿名类型
  • 您可以将
    字典
    一起使用
    IOrderedEnumerable

我会在OrderByDescending之后添加一个额外的
ToList
调用,以防止只对项目进行一次解析和排序。

我不确定我是否理解,是否有一个属性为“name”和“photos”的类型?我不确定我是否理解,是否有一个属性为“name”和“photos”的类型作为属性?group.key和group.OrderBy出现错误,因为group未定义,我是否在此处缺少其他内容?@Evonet是的。ToDictionary需要如下所示。ToDictionary(group=>group.key,group=>group.OrderByDescending(x=>x.DateAdded));group.key和group.OrderBy出现错误,因为group未定义,我是否在此处缺少其他内容?@Evonet yes。ToDictionary需要如下所示。ToDictionary(group=>group.key,group=>group.OrderByDescending(x=>x.DateAdded));