1

我有以下代码:

var query =
        from product in products.AsEnumerable()
        where product.Field<string>("Product") == "Phone"
        select new
        {
            Name = product.Field<string>("Name"),
            ProductNumber = product.Field<string>("ProductNumber"),
            ListPrice = product.Field<Decimal>("Price")
        };

但我收到以下错误:

无法将“System.Int32”类型的对象转换为“System.String”类型。

我认为这是因为在ProductNumber我并不总是有的列中并不总是有字符串,而在第一行ProductNumber中实际上是一个int. 我尝试将它们转换并转换为字符串,但没有奏效。

我怎样才能解决这个问题?

4

2 回答 2

1

从以下文档Field<T>

InvalidCastException[当] 基础列的值类型无法转换为泛型参数 T 指定的类型时抛出。

在您的情况下,列类型似乎是一个可为空的整数,因此您需要执行以下操作:

var query =
    from product in products.AsEnumerable()
    where product.Field<string>("Product") == "Phone"
    select new
    {
        Name = product.Field<string>("Name"),
        // Below, I am using ""+... idiom for a null-safe ToString
        ProductNumber = ""+product.Field<int?>("ProductNumber"),
        ListPrice = product.Field<Decimal>("Price")
    };

这个想法是将值作为 检索int,但接受缺少数据的数据行。

如果您不介意ProductNumber匿名类是可为空int的 s 而不是strings,请删除""+表达式的一部分。

于 2013-09-12T10:22:04.987 回答
0

首先,您使用 ProductNumber 作为字符串获取可枚举的记录,然后在 Enumerable 上进行从字符串到 int 的转换。

于 2013-09-12T10:27:50.387 回答