尝试创建对象列表时出错。我正在调用一个Web服务,它为某些产品返回不同数量的列。
我有一个类来存储这些值,这些值包含所有可用的列,但是当收到缺少1列的产品的数据时,它会失败并显示错误:
列'x'不属于表y。
因为我知道列不存在,所以如果它不存在,我需要一个替换值。我有大约50个不同的列,所以把它们中的每一个放在一个(如果列存在的话)是我想要避免的!
示例代码,dprow是包含所有可用列的对象模板
dprow.currency = row.Field<string>("currency");
dprow.categoryCode = row.Field<string>("categoryCode");
答案 0 :(得分:3)
这是假设您的行是DataRow,但这个概念无论如何都适用。您可以编写一个扩展方法来检查列是否首先存在:
public static class DataRowExtensions
{
public static T TryGetField<T>(this DataRow row, string fieldName)
{
return row.Table.Columns.Contains(fieldName) ? row.Field<T>(fieldName) : default(T);
}
}
用法示例:dprow.currency = row.TryGetField<string>("currency");
答案 1 :(得分:0)
从Web服务中获取的表(在我的情况下,我只是说创建一个全新的表),然后创建一个包含您想要存在的所有列的字典,以及默认值应该是什么是。如果该列尚未存在于表中,则使用默认值将其添加到表中。
DataTable dt = new DataTable();
Dictionary<string, object> columnDefaultValues = new Dictionary<string, object>(){
{"currency", "some default"},
{"categoryCode", "some other default"},
{"another", 43}
};
foreach (var keyPair in columnDefaultValues) {
if (!dt.Columns.Contains(keyPair.Key)) {
dt.Columns.Add(new DataColumn(keyPair.Key) { DefaultValue = keyPair.Value });
}
}