我正在使用linq搜索列表(用户在文本框中输入查询)。
我希望这个不区分大小写,并尝试使用IgnoreCase,但我不知道在哪里放它....我知道我可以使用上部或下部,但我想听听是否有人有任何替代方案方法?什么是最佳做法? 正则表达式似乎也不起作用?
string searchQuery = tbSearchQuery.Text;
var something= from x in y
where x.Subject.Contains(searchQuery)
select x;
答案 0 :(得分:7)
由于还没有其他人提出过,我建议使用静态String.Equals,这样您就不必担心null
并只返回您想要的信息。
String.Compare也可以,但你不是要对字符串进行排序(整数返回值的原因),只是在不区分大小写的比较中确定它们是否相等。
var something = from x in y
where string.Equals(x.Subject, searchQuery, StringComparison.CurrentCultureIgnoreCase)
select x;
答案 1 :(得分:5)
string searchQuery = tbSearchQuery.Text;
var something= from x in y
where x.Subject.IndexOf(searchQuery, StringComparison.OrdinalIgnoreCase) >= 0
select x;
答案 2 :(得分:2)
我使用以下自己的扩展(对于普通字符串)
public static bool Contains(this string source, string toCheck, StringComparison comp)
{
return source.IndexOf(toCheck, comp) >= 0;
}
public static bool ContainsIgnoreCase(this string source, string toCheck)
{
return source.IndexOf(toCheck, StringComparison.InvariantCultureIgnoreCase) >= 0;
}
HTH
答案 3 :(得分:0)
尝试
string searchQuery = tbSearchQuery.Text;
var something= from x in y
where x.Subject.IndexOf(searchQuery, StringComparison.OrdinalIgnoreCase) != -1
答案 4 :(得分:0)
您可以改用IndexOf
吗?
string searchQuery = tbSearchQuery.Text;
var something= from x in y
where x.Subject.IndexOf(searchQuery, StringComparison.OrdinalIgnoreCase) >= 0
select x;
答案 5 :(得分:0)
如果您使用LINQ-to-SQL
或Entity Framework
,则整理规则是固定的,并在表定义中设置。比较它们的唯一方法是ToUpper
(或ToLower
,但最好是ToUpper
,这里写的是http://www.siao2.com/2007/10/01/5218976.aspx)这两部分比较。
答案 6 :(得分:0)
我是扩展方法的第二种方式。我有一个课我用。只需在你的项目中加入它并引用你的名字空间即可离开。
using System;
namespace YOUR NAME SPACE
{
public static class StringExtensionMethods
{
/// <summary>
/// Extention method to allow a string comparison where you can supply the comparison type
/// (i.e. ignore case, etc).
/// </summary>
/// <param name="value">The compare string.</param>
/// <param name="comparisionType">The comparison type - enum, use OrdinalIgnoreCase to ignore case.</param>
/// <returns>Returns true if the string is present within the original string. </returns>
public static bool Contains(this string original, string value, StringComparison comparisionType)
{
return original.IndexOf(value, comparisionType) >= 0;
}
}
}
以下是使用它的LINQ查询示例:
var results = from promotion in response
where
String.IsNullOrEmpty(find.Code) ||
(promotion.Code != null && promotion.Code.Contains(find.Code, StringComparison.OrdinalIgnoreCase))
where
String.IsNullOrEmpty(find.Name) ||
(promotion.Name != null && promotion.Name.Contains(find.Name, StringComparison.OrdinalIgnoreCase))
select promotion;
答案 7 :(得分:-1)
var something= from x in y
where string.Compare(x.Subject, searchQuery, true) >= 0
select x;
这也可以处理任何字符串为空的情况。