繁体   English   中英

linq选择字段类型未知

[英]linq select field type unknown

我有以下代码:

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 我尝试过将它们转换并转换为字符串,但是没有用。

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

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 !而非string S,取出""+表达式的一部分。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM