【问题标题】:DataTable.Select string/int comparisonDataTable.Select 字符串/整数比较
【发布时间】:2013-09-03 10:21:55
【问题描述】:

我很疯狂地发现我的网格没有正确显示的原因,并发现我比较了一个 varchar 列(只有数值)而不使用 '(引号)。 问题是,对于某些数字,选择匹配,而对于其他数字,选择不匹配。

这是一个例子:

DataTable tab = new DataTable();
tab.Columns.Add("age", typeof(String));
DataRow row1 = tab.NewRow();
row1["age"] = "8";
tab.Rows.Add(row1);
DataRow row2 = tab.NewRow();
row2["age"] = "15";
tab.Rows.Add(row2); 

Console.WriteLine("Rows with age 8="+ tab.Select("age=8").Length);
Console.WriteLine("Rows with age 15=" + tab.Select("age=15").Length);

输出是:

Rows with age 8=0
Rows with age 15=1

为什么 8 个数字不匹配而 15 个数字是?这是一个错误吗?

【问题讨论】:

  • 我认为两者都不应该匹配,奇怪的是15匹配?
  • 更奇怪,把第二个语句中的数字从 15 改成第一个会说是真的
  • 我认为您可能必须使用单引号进行字符串比较
  • @Yuriy 是正确的,但这仍然是奇怪的行为

标签: c# datatable


【解决方案1】:

似乎是内部字符串/int 比较中的错误(功能?)。您必须添加单引号以将数据作为字符串进行比较,或者如果您需要将它们作为整数进行比较并且您可以使用 LINQ,您可以执行类似

int i = tab.AsEnumerable().Where(x => Convert.ToInt32(x["age"]) == 8).Count(); // 1

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2012-02-09
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多