我有一个 LINQ 语句如下:
myList = MyList.Where(x =>
x.Name.Contains(SearchValue) ||
x.Address.Contains(SearchValue)).ToList();
我的数据库可以有Name
“VSTS”或“vsts”等字段的大写或小写
我希望我的 LINQ 语句在任何情况下都可以执行。
在上面的 LINQ 语句中,如果我提供小写值并且数据库具有大写,则搜索失败..这是我不想要的。
最好的选择是使用不区分大小写的序数比较,但是该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));
使用以下内容:
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();
如果你需要使用 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();
你可以试试ToLower()
:
myList = MyList.Where(x => x.Name.ToLower().Contains(SearchValue.ToLower())
|| x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();
尝试这个:
myList = MyList.Where(x =>
x.Name.ToLower().Contains(SearchValue.ToLower()) ||
x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();
检查这是否适用于 Linq2Entity,可能是下层失败:p