【问题标题】:Datatable select length of row value for double数据表选择双精度行值的长度
【发布时间】:2017-02-16 11:43:48
【问题描述】:

我知道如何从 C# 中的数据表中过滤或选择如下。 (如果列的数据类型是字符串)。喜欢关注

Bool ReturnValue = DataTable.Select("LEN([" + ColumnName + "]) > 5").any();

上面的代码,如果任何包含 value 的行的长度大于 50 个字符,那么它将输出为 true。

我想用 double 类型做类似上面的事情。在这里,我有双数据类型的列“columnName”。在这种情况下,上面的代码会给我一个错误。

聚合参数中的语法错误:需要单个列参数 带有可能的 'Child' 限定符。

因为 LEN() 不适用于 double 类型。 任何人都知道如何对双数据类型列执行相同的操作。例如

Correct: "abcdef"
Error: "123456"

因为第一个是字符串类型并且 LEN() 适用于它但不适用于第二种情况。因为那里都是数字所以数据表中列的数据类型是 double 或 int32 并且 LEN() 在那里不起作用。

请帮忙 谢谢

【问题讨论】:

  • 双倍的“长度”是什么意思?
  • 您必须将双精度转换为字符串才能获得长度。
  • @jdweng 怎么样?可以举个例子吗?
  • ToString().Length > 50

标签: c# select filter datatable string-length


【解决方案1】:

您可以使用 LINQ to DataSet:

DataTable.AsEnumerable().Any(r => r.Field<double>(ColumnName).ToString().Length > 5)

但是计算 double 的“长度”是很奇怪的。例如。 10 的长度等于 2,但 1.2345 的长度等于 6

【讨论】:

  • 我试过了,但我有超过 50 条 lac 记录,而且 AsEnumerable 非常耗时,而且会话超时。所以不能用。谢谢。任何其他解决方案
  • @Maharshi 1) 阐明为什么需要检查 double 的“长度” 2) 如果您有大量数据,DataTable 选择和 LINQ 都不是好选择。因为两者都需要将所有数据拉入内存。您应该在服务器端进行验证
  • 我在表结构中有 nvarchar(50)。因为我需要在该列上添加 NONCLUSTERED INDEX,所以不能将其设置为 nvarchar(max)。所以不能从服务器端做到这一点
  • 1) 还不清楚 2) 为什么不能运行数据库查询?
  • 为此,首先我需要将记录插入到数据库表中。正确的?它会给我以下错误。因为我有 nvarchar(50) 和包含超过 100 个字符的行之一,例如 (12345656464621313256463..) 来自数据源的 String 类型的给定值无法转换为指定目标列的 nvarchar 类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多