我正在使用Select
命令从DataTable中选择特定的数据行:
DataRow[] dr;
dr = dataTable.Select("Roll_No = '"+rNo+"'");
我得到了正确答案,但如果我想使用为Roll_No定义的常量怎么办?
我已经定义了常量:
public const string ROLL_NUMBER = "Roll_No";
那么DataTable.Select()
的代码是什么?
答案 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)
如果你想传递一个常数而不是将它转换为字符串。