整数值上的 DataView LIKE 函数
Posted
技术标签:
【中文标题】整数值上的 DataView LIKE 函数【英文标题】:DataView LIKE function on Integer value 【发布时间】:2013-08-24 05:19:38 【问题描述】:我有 Sql 表 Tracks,它保存着 TrackID 和 TrackName 等跟踪信息。我有带有文本框和列表框的 c# 应用程序。我使用 dataSet 来检索 sql 表,当我在文本框上写“3”时,我想在 TrackID 为“3”的列表框中获取轨道名称。我的代码如下:
lbxTracks.DataSource = new DataView(das.Tables[0], "TrackID LIKE " + idNo.ToString(), "TrackName", DataViewRowState.CurrentRows);
但是我收到一个错误,因为 LIKE 函数不能在 System.Int32 上使用..
有什么想法吗?
【问题讨论】:
【参考方案1】:只需使用=
运算符:
"TrackID = "
这就是你真正想要的。
【讨论】:
这实际上回答了 OP 的 specific 问题,但是它没有回答一般问题,例如如果 OP 想要过滤 @987654323 怎么办@ 具有格式为11?22?33
的整数,因此应包括所有值,如11122133
、11222133
、11322033
、...(有很多)。所以解决方案是我们必须以某种方式将 int
转换为 string
并对其执行 LIKE。
@KingKing,你的例子比 OP 的例子要抽象得多,因此是理论上的。我相信我们可以找到一种方法,但正如你所说,在这种情况下我们不需要,所以 OP 只需要使用正确的运算符,是吗?【参考方案2】:
使用单引号和'%'作为
lbxTracks.DataSource = new DataView(das.Tables[0],
"TrackID LIKE '%" + idNo + "%'",
"TrackName", DataViewRowState.CurrentRows);
希望对你有帮助..
参考
RowFilter
【讨论】:
【参考方案3】:我不知道有任何其他方法可以在 Expression
字符串中为 RowFilter
包含类似 ToString()
的方法,但这样可以:
lbxTracks.DataSource = new DataView(das.Tables[0], "TrackID + '' LIKE '" + idNo + "'", "TrackName", DataViewRowState.CurrentRows);
注意+ ''
这将在执行LIKE
之前将您的TrackID
转换为string
。它就像一个魅力。如果有人知道在RowFilter
字符串中的列上执行某些ToString()
的另一种方法,请在下面发表评论。我真的很感激 :)
您应该使用string.Format()
来连接字符串,并注意%
在LIKE
表达式中的使用。我认为在这种情况下,如果您只想比较值的相等性(而不是格式),您可能需要使用正确的运算符(=
可以用于数字)。
【讨论】:
以上是关于整数值上的 DataView LIKE 函数的主要内容,如果未能解决你的问题,请参考以下文章