LINQ var 类型转换为 List

LINQ var type cast to List

我有一个使用 LINQ 对给定列表进行分组的方法。我想输出与其他 class 的分组列表。正确的打字方法是什么?

方法:

 public List<OutMyFileData> GetGroupedFiles(string path)
{
    // List of all files in given path
    List<MyFileData> allFiles = GetFiles(path);

    return allFiles.OrderBy(file => file.Extension)
                .GroupBy(file => file.Extension)
                .Select(file => new
                {
                    type = file.Key,
                    files = file.Select(ofile => new
                    {
                        ofile.Name,
                        ofile.LastMod,
                        ofile.Size
                    })
                }).ToList() as List<OutMyFileData>;
}

和class是:

public class MyFileData
{
public string Name { get; set; }

public string LastMod { get; set; }

public long Size { get; set; }

public string Extension { get; set; }
}


public class OutMyFileData
{
public string Name { get; set; }

public string LastMod { get; set; }

public long Size { get; set; }

}

首先,您可能不会 return 匿名对象作为结果,因为无法为 return 类型的方法声明该类型。

如果我理解正确,你可以尝试写一个 class 作为 return ViewModel MyFileViewModel,它可以包含你的 return 值。

public class MyFileViewModel{
    public string Type { get; set; }
    public IEnumerable<OutMyFileData> Files { get; set; }
}
                
public class OutMyFileData
{
    public string Name { get; set; }

    public string LastMod { get; set; }

    public long Size { get; set; }
}

那么你可以如下调用

public List<MyFileViewModel> GetGroupedFiles(string path)
{
    List<MyFileData> allFiles = GetFiles(path);

    return allFiles.GroupBy(file => file.Extension)
        .Select(file => new MyFileViewModel()
        {
            Type = file.Key,
            Files = file.Select(ofile => new OutMyFileData()
            {
                Name = ofile.Name,
                LastMod = ofile.LastMod,
                Size = ofile.Size
            })
        }).ToList();
}