【问题标题】:DataView LIKE function on Integer value整数值上的 DataView LIKE 函数
【发布时间】: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 上使用..

有什么想法吗?

【问题讨论】:

    标签: c# .net ado.net dataset dataview


    【解决方案1】:

    只需使用= 运算符:

    "TrackID = "
    

    这就是你真正想要的。

    【讨论】:

    • 这实际上回答了 OP 的 specific 问题,但是它没有回答一般问题,例如如果 OP 想要过滤 @987654323 怎么办@ 具有格式为11?22?33 的整数,因此应包括所有值,如111221331122213311322033、...(有很多)。所以解决方案是我们必须以某种方式将 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 表达式中的使用。我认为在这种情况下,如果您只想比较值的相等性(而不是格式),您可能需要使用正确的运算符(= 可以用于数字)。

      【讨论】:

        猜你喜欢
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2011-08-10
        • 1970-01-01
        • 2021-12-24
        • 2020-10-29
        相关资源
        最近更新 更多