【问题标题】:Get particular column from datatable从数据表中获取特定列
【发布时间】:2013-01-21 12:09:48
【问题描述】:

我需要数据表中的特定列将其绑定到 DataGridView。我有以下专栏。

Work1     价格     面积     que   Len     bre      尺寸
A             12          x         1        1.2      1        1.2
A              12           y         2      2         2.2     4.4
A            12            z         3      11       1          11

上面是我的数据表,我需要指定列,即 Area, Que, bre, size [Que * (bre * Len)]
为了获得这种类型的数据,我使用了 Linq-to-DataTable 查询。

 var data = dt.AsEnumerable().Select
                (r => new
                {
                    Area = r.Field<string>("Area"),
                    Que = r.Field<int>("Quantity"),
                    Breath = r.Field<decimal>("Breath"),
                    Length = r.Field<decimal>("Length"),
                    totLen = r.Field<int>("Quantity") * (r.Field<decimal>("Breath") * r.Field<decimal>("Length"))
                }).ToList();

但它不起作用,它没有价值,我不知道为什么? 谁能告诉我该怎么做? 如果有任何其他替代选项可用,我很乐意看到......

【问题讨论】:

  • 什么没有给出任何价值,整个查询或字段totLen?您如何尝试评估查询,您在哪里使用它?您确定没有(默默地)捕获的异常吗?
  • 它给出错误“指定的演员表无效。”
  • 所以很明显,您需要将字段转换为正确的类型。检查表中每列的数据类型,并在 linq 查询中进行相应的转换。

标签: c# datatable linq-to-dataset


【解决方案1】:

它给出错误“指定的转换无效。”

所以你在Field 扩展方法中得到了一个InvalidCastException

您必须检查哪一列的类型与您指定的类型不匹配,例如:

totLen = r.Field<int>("Quantity") * r.Field<decimal>("Breath") * r.Field<decimal>("Length")

如果三列中的任何一列的类型与您提供的不同,上述操作将失败。也许Breath 不是decimal 而是double

编辑您的问题并提供数据库中的类型,我们可以帮助识别正确的类型。

【讨论】:

  • 谢谢你,伙计,我忘了设置列的类型,这个很有用,对我有帮助。再次感谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多