簡體   English   中英

如何聲明分組Linq查詢的返回類型

[英]How to declare the return Type of a grouping Linq query

以下查詢返回的類型是什么:

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>>'

但是我不知道如何聲明這種類型。

我試過了

public List<string, IOrderedEnumerable<Photo>> Photos {get; set;)

但是列表只能包含一個元素

如果您不想創建其他類,則可以使用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());

您有幾種選擇:

  • 您可以創建類以容納分組鍵和與其關聯的值的集合。 並創建該類的實例,而不是匿名類型。
  • 您可以使用Dictionary<TKey, TValue> ,將Value IOrderedEnumerable<T>
var photos = job.Photos
                .GroupBy(x => x.Location)
                .ToDictionary(group => group.Key, 
                              group => group.OrderByDescending(x => x.DateAdded));

我將在OrderByDescending之后添加一個額外的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();

或者,您可以使用Tuple類型:

List<Tuple<string, IOrderedEnumerable<Photo>> photos = job.Photos.GroupBy(x => x.Location)
        .Select(group =>
            Tuple.Create(
                group.Key,
                group.OrderByDescending(x => x.DateAdded)))
        .OrderBy(group => group.Item1)
        .ToList(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM