簡體   English   中英

迭代數據表時檢查列是否存在?

[英]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 ),則迭代失敗。

有沒有辦法檢查列是否存在? 我嘗試使用三元運算符來檢查該值,但顯然它不起作用,因為我仍在檢查該值是否存在。

如果列不存在/不存在,你想做什么? 拋出錯誤? 如果是這樣,您應該在閱讀之前進行驗證。 分配默認值? Null 合並。

對於驗證,您可以使用您自己的自定義錯誤包裹在try ... catch和 rethrow 中。

對於 null 合並,類似於:

ReportMonth = Convert.ToString(record["ReportMonth"]?? string.Empty)

您可以使用:

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

如果 object 是nullConvert.ToString(object)返回string.Empty ,所以我們不需要檢查它。

下面是速度性能優化:

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(...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM