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"
的组有两个条目。
我正在尝试使用 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"
的组有两个条目。