带有参数 select 的 LINQ 自定义 class 查询

LINQ custom class query with parameters select

我需要获取自定义 class MyFileData

的 linq 查询
public class MyFileData 
{
    private string name;
    private string last_mod;
    private string file_type;
    private long size;

    public string Name 
    {
        get { return name; }
        set { name = value; }
    }

    public string LastMod
    {
        get { return last_mod; }
        set { last_mod = value; }
    }

    public long Size
    {
        get { return size; }
        set { size = value; }
    }

    public string FileType
    {
        get { return file_type;}
        set { file_type = value; }
    }
}

但我想要像这样

没有file_type的所有属性的输出值
from file in files
    select new MyFileData
    {
        Name = file.Name,
        LastMod = file.LastMod,
        Size = file.Size,
    };

所以没有“fileType”的输出

[{"name":"desktop.ini","lastMod":"07.12.2019 10:12:42","size":174,"fileType":null}]

这样

[{"name":"desktop.ini","lastMod":"07.12.2019 10:12:42","size":174}]

我也想用这样的扩展名类型对文件进行分组

from file in files
group file by file.FileType;

但是我得到一个错误。

文件是 IEnumerable<MyFileData> 类型。

程序的整个端点图下方:

app.MapGet($"/browse", (string? path, string? group, MyGetFilesInfo myGetFilesInfo) =>
{
IEnumerable<MyFileData> files = myGetFilesInfo.GetFiles(path);

if (group == "true")
{
    return
        from file in files
        select file;
}

var query = 
    from file in files
    select new MyFileData
    {
        Name = file.Name,
        LastMod = file.LastMod,
        Size = file.Size,
    };

return JsonConvert.SerializeObject(query);
});

简单的方法,你可以尝试使用匿名class

files.Select(x=> new { 
    Name = x.Name,
    LastMod = x.LastMod,
    Size = x.Size
});

编辑

错误是因为你的端点return是两种不同的类型,会让编译器混淆。

您可以尝试使用 Results.Json 方法联合 return 您的 JSON 字符串。

app.MapGet($"/browse", (string? path, string? group, MyGetFilesInfo myGetFilesInfo) =>
{
    IEnumerable<MyFileData> files = myGetFilesInfo.GetFiles(path);

    if (group == "true")
    {
        return Results.Json(files);
    }

    var query = 
        from file in files
        select new 
        {
            Name = file.Name,
            LastMod = file.LastMod,
            Size = file.Size
        };

    return Results.Json(query);
});

您可以尝试在 JsonProperty 属性中设置空值处理。设置 NullValueHandling = NullValueHandling.Ignore 会在序列化或反序列化对象时忽略空值。

[JsonProperty("fileType", NullValueHandling = NullValueHandling.Ignore)]
public string FileType
{
    get { return file_type;}
    set { file_type = value; }
}