如何在DataTable.Select()方法中使用已定义的字符串常量?

时间:2014-08-05 05:23:42

标签: c# winforms

我正在使用Select命令从DataTable中选择特定的数据行:

DataRow[] dr;
dr = dataTable.Select("Roll_No = '"+rNo+"'");

我得到了正确答案,但如果我想使用为Roll_No定义的常量怎么办?

我已经定义了常量:

public const string ROLL_NUMBER = "Roll_No"; 

那么DataTable.Select()的代码是什么?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,只需将变量替换为硬编码值。

var rows = dataTable.Select(string.Format("{0} = '{1}'", ROLL_NUMBER, rNo));

假设Roll_No是一个数字字段,Select语句中的那些单括号可能会弄乱您的查询...如果您没有得到预期结果,请尝试删除它们。

或者,您也可以选择使用LINQ语句:

var rows = dataTable.AsEnumerable()
                    .Where(x => x.Field<int>(ROLL_NUMBER) == rNo);

更新(来自后续评论):

  我可以使用如下吗? var dr = datTable.Select(“Constants.ROLL_NUMBER ='”+ rNo +“'”);这里,Constants.ROLL_NUMBER是为卷号定义的常量。

不,因为您的变量名称在引号内,因此您最终会对字符串文字“ROLL_NUMBER”进行过滤,而不是存储在ROLL_NUMBER中的基础列名称。

要使用您的代码,您可以这样做:

var dr = dataTable.Select(Constants.ROLL_NUMBER = "'" + rNo + "'");

答案 1 :(得分:0)

字符串是一个字符串。您已经知道如何连接字符串,因为您已经这样做了。 ROLL_NUMBER只是另一个字符串,就像您当前代码中的rNo一样。

那就是说,我倾向于使用String.Format作为那种表达方式。

答案 2 :(得分:0)

dataTable.Select()方法只能传递字符串。就像它一样

public DataRow []选择(string filterExpression,string sort)

如果你想传递一个常数而不是将它转换为字符串。