列不属于表c#

时间:2015-10-22 21:07:37

标签: c# .net

尝试创建对象列表时出错。我正在调用一个Web服务,它为某些产品返回不同数量的列。

我有一个类来存储这些值,这些值包含所有可用的列,但是当收到缺少1列的产品的数据时,它会失败并显示错误:

列'x'不属于表y。

因为我知道列不存在,所以如果它不存在,我需要一个替换值。我有大约50个不同的列,所以把它们中的每一个放在一个(如果列存在的话)是我想要避免的!

示例代码,dprow是包含所有可用列的对象模板

dprow.currency = row.Field<string>("currency");
dprow.categoryCode = row.Field<string>("categoryCode"); 

2 个答案:

答案 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 });
    }
}
相关问题