我有一个LINQ语句如下:
myList = MyList.Where(x =>
x.Name.Contains(SearchValue) ||
x.Address.Contains(SearchValue)).ToList();
我的数据库可以为Name
字段设置大写或小写,例如'VSTS'或'vsts'
我希望我的LINQ语句可以执行任何情况。
在上面的LINQ语句中,如果我提供小写值并且数据库具有大写,则搜索失败..这是我不想要的。
答案 0 :(得分:3)
最佳选择是使用序数不区分大小写的比较,但Contains
方法不支持它,因此您的另一个选择是使用string.IndexOf
。
最好将它包装在扩展方法中,例如:
public static bool Contains(this string target, string value, StringComparison comparison)
{
return target.IndexOf(value, comparison) >= 0;
}
所以你可以使用:
myList.Where(x => x.Name.Contains(SearchValue, StringComparison.OrdinalIgnoreCase) ||
x.Address.Contains(SearchValue, StringComparison.OrdinalIgnoreCase));
答案 1 :(得分:1)
使用以下内容:
myList = MyList.Where(x =>
x.Name.ToUpper(CultureInfo.InvariantCulture).Contains(
SearchValue.ToUpper(CultureInfo.InvariantCulture)) ||
x.Address.ToUpper(CultureInfo.InvariantCulture).Contains(
SearchValue.ToUpper(CultureInfo.InvariantCulture))).
ToList();
答案 2 :(得分:0)
试试这个:
myList = MyList.Where(x =>
x.Name.ToLower().Contains(SearchValue.ToLower()) ||
x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();
检查这是否适用于Linq2Entity,可能是tolower失败:p
答案 3 :(得分:0)
您可以尝试ToLower()
:
myList = MyList.Where(x => x.Name.ToLower().Contains(SearchValue.ToLower())
|| x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();
答案 4 :(得分:0)
如果你需要使用Contains()试试这个:
var svUP = SearchValue.ToUpper();
myList = MyList.Where(x => x.Name.ToUpper().Contains(svUP ) || x.Address.ToUpper().Contains(svUP )).ToList();
但是如果你的字段包含完整的搜索值而且只有问题是套管,那么你应该使用Equals()代替StingComparison:
myList = MyList.Where(x => x.Name.Equals(SearchValue, StringComparison.InvariantCultureIgnoreCase) || x.Address.Equals(SearchValue, StringComparison.InvariantCultureIgnoreCase)).ToList();