【问题标题】:.Net Filter BindingSource.Net 过滤器绑定源
【发布时间】:2011-01-17 21:10:31
【问题描述】:

如果我像这样过滤 BindingSource 的列:"column1 LIKE '%John%'",则该列中包含 John 的所有行都将返回。

如何返回column1包含[some text]John[some text]Doe的所有行?

"column1 LIKE '%John%Doe'" 不起作用。

【问题讨论】:

    标签: .net filter bindingsource


    【解决方案1】:

    根据http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx 的文档

    通配符 * 和 % 可以互换使用 LIKE 中的通配符 比较。如果 LIKE 中的字符串 子句包含 * 或 %,那些 字符应包含在 括号 ([])。如果括号在 子句,每个括号字符应该 括在括号中(例如 [[] 或者 []])。允许使用通配符 模式的开始和结束,或在 模式的结尾,或开始 的一种模式。例如:

    "ItemName LIKE '产品'"

    "ItemName LIKE '*product'"

    "ItemName LIKE '产品*'"

    不允许使用通配符 字符串的中间。例如, 'te*xt' 是不允许的。

    因此,你不能使用 LIKE 来做你想做的事。您的下一个最佳选择是获取字符串表示并使用正则表达式对其进行解析以查找您想要的文本。这会很慢。

    你可以这样做

    column1 LIKE '%John%' AND LIKE %Doe%'
    

    但逻辑不同,可能不是你真正想要的。

    编辑 - 添加

    您最好在服务器级别进行过滤,因为您的数据库可能支持字符串中间的通配符。我刚刚在我们的 SQL Server 上尝试过它,它工作正常。 (SQL Server 2005)

    【讨论】:

    • 我最终可以通过通配符拆分表达式并生成 X LIKE 表达式,其中 X 是通配符的数量。这不是更好吗?
    • 可以,但不保证顺序。例如,我在上面显示的建议将返回带有“Doe sadasd John”和“John asdasdasd Doe”的行。多个 LIKE 语句会出现相同的问题。我相信您最好对数据库查询进行过滤,因为数据库可能支持字符串中间的通配符。我相当肯定 SQL Server 无论如何都能做到。
    【解决方案2】:

    试试这个

       "ItemName LIKE '*john*' and  ItemName LIKE '*doe*'"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      相关资源
      最近更新 更多