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
可以为nullint
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
可以为nullint
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提供了答案,并给出了一些很好的解释。我建议接受他/她的答案。。)