迭代数据表时检查列是否存在?
Check if column exists when iterating datatable?
我正在获取数据表并将其序列化为 geojson。我正在为此使用 linq:
var envelope = new
{
type = "FeatureCollection",
features = dataTable.AsEnumerable().Select(record => new {
type = "Feature",
properties = new
{
Name = Convert.ToString(record["Name"]),
Date = Convert.ToString(record["Date"]),
Icon = Convert.ToString(record["imageUrl"]),
//ReportMonth = Convert.ToString(record["Month"]),
ReportMonth = (!string.IsNullOrEmpty(record["Month"])) ? Convert.ToString(record["ReportMonth"]) : string.Empty
},
geometry = new
{
type = "Point",
coordinates = new[] {
Convert.ToDecimal(record["Lon"]),
Convert.ToDecimal(record["Lat"])
}
}
}).ToArray()
};
这在数据表包含所有列时有效。当列在数据表中不存在时(即列 Month
),则迭代失败。
有没有办法检查该列是否存在?我尝试使用三元运算符来检查该值,但它显然不起作用,因为我仍在检查该值是否存在。
您可以使用:
ReportMonth = record.Table.Columns.Contains("Month")
? Convert.ToString(record["Month"])
: string.Empty;
Convert.ToString(object)
returns string.Empty
如果对象是 null
所以我们不需要检查它。
这里是速度性能优化:
bool hasName = dataTable.Columns.Contains("Name");
bool hasDate = dataTable.Columns.Contains("Date");
bool hasimageUrl = dataTable.Columns.Contains("imageUrl");
bool hasMonth = dataTable.Columns.Contains("Month");
bool hasLon = dataTable.Columns.Contains("Lon");
bool hasLat = dataTable.Columns.Contains("Lat");
var envelope = new
{
// use: ReportMonth = hasMonth ? ... : ... ;
}
你可以试试 record.Table.Columns.Contains(...)
.
我正在获取数据表并将其序列化为 geojson。我正在为此使用 linq:
var envelope = new
{
type = "FeatureCollection",
features = dataTable.AsEnumerable().Select(record => new {
type = "Feature",
properties = new
{
Name = Convert.ToString(record["Name"]),
Date = Convert.ToString(record["Date"]),
Icon = Convert.ToString(record["imageUrl"]),
//ReportMonth = Convert.ToString(record["Month"]),
ReportMonth = (!string.IsNullOrEmpty(record["Month"])) ? Convert.ToString(record["ReportMonth"]) : string.Empty
},
geometry = new
{
type = "Point",
coordinates = new[] {
Convert.ToDecimal(record["Lon"]),
Convert.ToDecimal(record["Lat"])
}
}
}).ToArray()
};
这在数据表包含所有列时有效。当列在数据表中不存在时(即列 Month
),则迭代失败。
有没有办法检查该列是否存在?我尝试使用三元运算符来检查该值,但它显然不起作用,因为我仍在检查该值是否存在。
您可以使用:
ReportMonth = record.Table.Columns.Contains("Month")
? Convert.ToString(record["Month"])
: string.Empty;
Convert.ToString(object)
returns string.Empty
如果对象是 null
所以我们不需要检查它。
这里是速度性能优化:
bool hasName = dataTable.Columns.Contains("Name");
bool hasDate = dataTable.Columns.Contains("Date");
bool hasimageUrl = dataTable.Columns.Contains("imageUrl");
bool hasMonth = dataTable.Columns.Contains("Month");
bool hasLon = dataTable.Columns.Contains("Lon");
bool hasLat = dataTable.Columns.Contains("Lat");
var envelope = new
{
// use: ReportMonth = hasMonth ? ... : ... ;
}
你可以试试 record.Table.Columns.Contains(...)
.