Linq对DataTable中的Like操作符是什么?

5

我正在使用Linq to DataTable。我如何在where子句中应用like运算符。我想要像SQL中的like运算符一样搜索数据。

我搜索并尝试了以下代码,但出现错误:方法'Boolean Like(System.String, System.String)'无法在客户端使用;它仅用于转换为SQL。

var details = from addresses in dt.AsEnumerable() 
    where SqlMethods.Like(prefixText, prefixText + "%") || SqlMethods.Like(prefixText, "%" + prefixText + "%")
    select (string) addresses["Details"];                      

return details.ToArray();
2个回答

4

您最好的选择可能是将其重写为正则表达式并使用

where yourRegex.IsMatch(row.SomeValue)

如果只是以某个字符串开头的查询:

where row.SomeValue.StartsWith(prefix)

谢谢Marc,很抱歉我不了解正则表达式。您能否指导一下这个SQL语句中的正则表达式是什么?"where companyname like @string+'%' or companyname like '% '+@string+'%' ";谢谢。 - haansi
1
@haansi - 那里不需要使用正则表达式; 只需使用 where row.CompanyName.Contains(someName)。 - Marc Gravell
@Marc 我之前尝试过,但它没有返回正确的结果。 假设我有ABC、ABC And Company、BAC、ABC Associates值。 使用它会返回BAC,如果我传递它应该返回所有但不包括BAC。 请指导。 - haansi
@haansi - 你能给一个完整的例子吗?Contains(除了大小写)与%foo%相同。 - Marc Gravell
@haansi 啊,我没看到空格;然后是 where row.CompanyName.StartsWith(name) || row.CompanyName.Contains(" " + name) - Marc Gravell
显示剩余2条评论

4
var details = from addresses in dt.AsEnumerable()
                where addresses.Field<string>("Details").StartsWith(prefixText)
                ||  addresses.Field<string>("Details").Contains(prefixText)
                select addresses.Field<string>("Details");

包含"do not"的返回结果不正确。假设我有ABC、ABC和Company、BAC、ABC Associates等值。如果使用它,甚至会返回BAC,但如果我传递“do not”,它应该返回除了BAC以外的所有内容。请指导。 - haansi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接