[英]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 是null
, Convert.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.