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