Home > OS >  LINQ var type cast to List
LINQ var type cast to List

Time:03-30

I've got a method grouping given List with LINQ. I want to output the grouped list with other class. What is the proper way to cast type?

Method:

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

And classes:

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

}

CodePudding user response:

First, you might not return an anonymous object as your result because the type can't be declared for the return type of method.

If I understand correctly, you can try to write a class as return ViewModel MyFileViewModel which can contain your return values.

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

Then you can call as below

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