LINQ 查询 - 自定义输出,组 Headers

LINQ Query - Custom Output, Group Headers

我正在尝试使用 LINQ 获取自定义输出, 我自定义了 class 来存储数据:

public class MyFileData
{
// File Name
public string Name { get; set; }
// File's last modification date
public string LastMod { get; set; }
// File size
public long Size { get; set; }
// File extension
public string FileType { get; set; }
}

所需的输出应如下所示:

{
    "name": "codeblocks-20.03mingw-setup.exe",
    "lastMod": "13.03.2022 22:57:47",
    "size": 152419674,
},
{
    "name": "somefile.png",
    "lastMod": "16.01.2022 13:16:06",
    "size": 82973864,
},

因此排除了 class 属性之一。 我还想根据文件扩展名添加组 headers,所以看起来像这样:

"type": ".exe",
"files": [
{
    "name": "codeblocks-20.03mingw-setup.exe",
    "lastMod": "13.03.2022 22:57:47",
    "size": 152419674,
    "fileType": ".exe"
},
{
    "name": "DiscordSetup.exe",
    "lastMod": "16.01.2022 13:16:06",
    "size": 82973864,
    "fileType": ".exe"
},
...
]

但目前我能够 return 只是 class 元素的列表,输出如下所示:

[
{
    "name": null,
    "lastMod": null,
    "size": 0,
    "fileType": ".exe"
},
{
    "name": "setup_becastled_0.2.14_(64bit)_(50823).exe",
    "lastMod": "13.01.2022 13:00:33",
    "size": 281792488,
    "fileType": ".exe"
},
{
    "name": "basic-miktex-21.12-x64.exe",
    "lastMod": "12.01.2022 23:20:32",
    "size": 136437512,
    "fileType": ".exe"
}]

class方法returns:

 List<MyFileData> list = new(MyFileData){*method getting files*}
 return list;

如果分组:

 foreach(string fileExtension in fileExtensions)
    {
        IEnumerable<MyFileData> query =
             from file in allFiles
             where file.FileType == fileExtension
             select file;

        sortedFiles.Add(new MyFileData{
            FileType = fileExtension });
        sortedFiles.AddRange(query.ToList());
    }
        
    return sortedFiles;

我需要提示如何使用 LINQ 进行自定义输出

您可以使用 GroupBy() 方法(参见 docs)。

假设你有这个:

var myFileDatas = new List<MyFileData>
{
    new MyFileData { Name = "codeblocks-20.03mingw-setup.exe", FileType = ".exe", LastMod = "13.03.2022 22:57:47", Size = 152419674 },
    new MyFileData { Name = "DiscordSetup.exe", FileType = ".exe", LastMod = "16.01.2022 13:16:06", Size = 82973864 },
    new MyFileData { Name = "Abc.zip", FileType = ".zip", LastMod = "01.01.2022 13:16:06", Size = 82973864 }
};

...下一行结果分为两组。

var result = myFileDatas.GroupBy(x => x.FileType);

键为 ".zip" 的组有 1 个条目,键为 ".exe" 的组有两个条目。