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

本文关键字:定义 常量 字符串 方法 DataTable Select | 更新日期: 2023-09-27 18:16:37

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

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

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

我已经定义了常量:

public const string ROLL_NUMBER = "Roll_No"; 

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

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

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

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("常量。ROLL_NUMBER = ' ' ' +rNo+ ' ' ' ');这里,常数。ROLL_NUMBER是为卷号定义的常量。

不,因为你的变量名在引号里面,所以你最终会过滤字符串字面量"ROLL_NUMBER",而不是存储在ROLL_NUMBER中的底层列名。

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

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

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

也就是说,我倾向于使用String.Format来表示这种类型的表达式。

dataTable.Select()方法只能传递字符串。Just Like it

public DataRow[] Select(string filterExpression,string sort)

如果你想传递一个常量,你必须把它转换成字符串