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();
任何人都可以建议我为什么?
答案 0 :(得分:1)
您应该可以直接从decimal
返回Select()
。
decimal[] temp = dt.AsEnumerable().Select(
r => r.Field<decimal>("Quantity") * (r.Field<decimal>("Breath") * r.Field<decimal>("Length")
)).ToArray();
答案 1 :(得分:1)
您无需创建匿名类型:
decimal[] temp = dt.AsEnumerable()
.Select(r => r.Field<int>("Quantity")
* r.Field<decimal>("Breath")
* r.Field<decimal>("Length"))
.ToArray();
答案 2 :(得分:1)
您正在尝试将匿名类型转换为十进制,这当然不起作用。不要创建匿名类型 - 只需选择十进制值:
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();
但同样,您不需要匿名类型来选择单个值。
答案 3 :(得分:0)
您的投影(Select
)会创建匿名类型的实例,如下所示:
class SomeAnonymousClass
{
public totLen { get; set; }
}
...哪些实例无法转换为十进制。