检查数据表时是否存在列?

我正在获取一个数据表并将其序列化为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),则迭代失败。

是否可以检查该列是否存在?我尝试使用三元运算符检查该值,但是由于我仍在检查该值是否存在,因此它显然不起作用。

liuqingsong123 回答:检查数据表时是否存在列?

您可以使用:

ReportMonth = record.Table.Columns.Contains("Month") 
            ? Convert.ToString(record["Month"])
            : string.Empty;

Convert.ToString(object)如果对象是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(...)

本文链接:https://www.f2er.com/3163307.html

大家都在问