Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq选择字段类型未知_C#_Linq - Fatal编程技术网

C# linq选择字段类型未知

C# linq选择字段类型未知,c#,linq,C#,Linq,我有以下代码: var query = from product in products.AsEnumerable() where product.Field<string>("Product") == "Phone" select new { Name = product.Field<string>("Name"), ProductNumber = produ

我有以下代码:

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")
        };
var查询=
来自products.AsEnumerable()中的product
其中product.Field(“产品”)=“电话”
选择新的
{
名称=产品字段(“名称”),
ProductNumber=产品字段(“ProductNumber”),
ListPrice=产品字段(“价格”)
};
但我得到了以下错误:

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

我假设这是因为在
ProductNumber
列中,我并不总是有字符串,而在第一行中
ProductNumber
实际上是一个
int
。我试着把它们转换成弦,但没有成功


如何解决此问题?

来自
字段的文档:

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")
    };
var查询=
来自products.AsEnumerable()中的product
其中product.Field(“产品”)=“电话”
选择新的
{
名称=产品字段(“名称”),
//下面,我使用“+…习惯用法”来表示空安全ToString
ProductNumber=”“+产品字段(“ProductNumber”),
ListPrice=产品字段(“价格”)
};
其思想是以
int
的形式检索值,但接受缺少数据的数据行


如果您不介意匿名类的
ProductNumber
可以为null
int
s而不是
string
s,请从
字段的文档中删除表达式的
+
部分。

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")
    };
var查询=
来自products.AsEnumerable()中的product
其中product.Field(“产品”)=“电话”
选择新的
{
名称=产品字段(“名称”),
//下面,我使用“+…习惯用法”来表示空安全ToString
ProductNumber=”“+产品字段(“ProductNumber”),
ListPrice=产品字段(“价格”)
};
其思想是以
int
的形式检索值,但接受缺少数据的数据行


如果您不介意匿名类的
ProductNumber
可以为null
int
s而不是
string
s,请删除
“”+
表达式的一部分。

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

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

ProductNumber=product.Field(“ProductNumber”).ToString(),
为什么不将
字符串更改为
int
(即
product.Field(“ProductNumber”),
更改为
product.Field(“ProductNumber”),
?不,我直到现在才试过,而且很有效。谢谢。@RoxanaDinca不客气。dasblinkenlight提供了一些很好的解释。我建议接受他/她的答案。;
ProductNumber=product.Field(“ProductNumber”).ToString(),
为什么不将
string
更改为
int
(例如,
product.Field(“ProductNumber”),
product.Field(“ProductNumber”),
?不,我到现在为止还没有尝试过,而且效果很好。谢谢。@RoxanaDinca不客气。dasblinkenlight提供了答案,并给出了一些很好的解释。我建议接受他/她的答案。。)