C#Datatable.select在数据中使用#hash字符失败

时间:2015-01-12 19:45:46

标签: c# datatable

我有一个数据表,其中包含每月放置的服务调用列表。列F4包含机器的序列号,现在我想要做的就是找到为每个序列号放置的服务调用数,并将计数添加到新的列中。我编写了下面的代码并且一切正常,但是当数据中出现散列符号'#'以反映未知或尚未分配的序列号时出现问题。这导致错误“无法对System.String和System.Int32执行'='操作。”在“DataRow [] FoundRow = dt.Select(”[F4] =“+ chkStr); F4列是一个文本/字符串,我甚至尝试克隆数据表并手动将列分配给.DataType = typeof(String);我知道它的#符号给出了问题,好像我从数据中删除了测试目的一切都很好。任何人都可以对此有所了解。非常感谢。

// datatable dt contains all my monthly call data
dt.Columns.Add("Counter", typeof(System.Int32)); // add a count column to the datatable            

for (int i = 0; i < dt.Rows.Count; i++) //loop through the datatable
{
string chkStr = dt.Rows[i]["F4"].ToString(); // get 1st serial num, then each other one in loop
DataRow[] FoundRows = dt.Select("[F4] ="  + chkStr); // OK now select all the table rows containing this serial, place in FoundRows               
Int32 count = FoundRows.Length; // get the length which is a count of the same serial num / service calls                
dt.Rows[i]["Counter"] = count;
}

2 个答案:

答案 0 :(得分:0)

不要担心在Int32中计算值。谁在乎;你仍然可以使用&#34;字符串时的数字。把它读成一个字符串,&#34;#&#34;将有效,数字将有效。这是一个简单的解决方案,甚至可以告诉你还有多少尚未分配。

public class GroupCounter {
    private Dictionary<string, int> serialNumbers;

    public GroupCounter() {
        this.serialNumbers = new Dictionary<string, int>();
    }

    public Dictionary<string, int> Count(DataTable table) {
        foreach (DataRow row in table.Rows) {
            int counter;
            string serial = row.Field<string>("COLUMN");
            if(!this.serialNumbers.TryGetValue(serial, out counter)){
                this.serialNumbers.Add(serial, 1);
            }
            counter++;
        }
        return this.serialNumbers;
    }
}

由于这会返回一个字典,您可以使用字典[key](您的序列号)来获取任何序列号的数量。

答案 1 :(得分:0)

非常感谢您的建议,但发现答案只是在chkStr周围添加单引号,如下所示,然后代码处理#hash字符。感谢你的时间。

DataRow[] FoundRows = dt.Select("[F4] ='" + chkStr + "'");