带有参数 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; }
}
我需要获取自定义 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; }
}