Linq查询“特定类型转换”无效
本文关键字:类型转换 无效 查询 Linq | 更新日期: 2023-09-27 17:54:58
Linq to datatable查询给我错误特定转换无效
decimal[] temp = dt.AsEnumerable()
.Select(r => new
{
totLen = r.Field<decimal>("Quantity")
* (r.Field<decimal>("Breath")
* r.Field<decimal>("Length"))
})
.Cast<decimal>()
.ToArray();
有谁能告诉我为什么吗?
您不需要创建匿名类型:
decimal[] temp = dt.AsEnumerable()
.Select(r => r.Field<int>("Quantity")
* r.Field<decimal>("Breath")
* r.Field<decimal>("Length"))
.ToArray();
您应该能够直接从Select()
返回decimal
。
decimal[] temp = dt.AsEnumerable().Select(
r => r.Field<decimal>("Quantity") * (r.Field<decimal>("Breath") * r.Field<decimal>("Length")
)).ToArray();
您试图将匿名类型强制转换为十进制,这当然是行不通的。不要创建匿名类型-只需选择十进制值:
decimal[] temp = (from r in dt.AsEnumerable()
select r.Field<decimal>("Quantity") *
r.Field<decimal>("Breath") *
r.Field<decimal>("Length")).ToArray();
与Linq方法语法相同:
decimal[] temp = dt.AsEnumerable()
.Select(r => r.Field<decimal>("Quantity") *
r.Field<decimal>("Breath") *
r.Field<decimal>("Length"))
.ToArray();
如何让你的代码工作?用Select
代替Cast
:
.Select(x => x.totLen).ToArray();
但是,同样,您不需要匿名类型来选择单个值
您的投影(Select
)创建了如下匿名类型的实例:
class SomeAnonymousClass
{
public totLen { get; set; }
}
…哪些实例不能转换为十进制