2

我有一个 LINQ 语句如下:

myList = MyList.Where(x => 
    x.Name.Contains(SearchValue) ||
    x.Address.Contains(SearchValue)).ToList();

我的数据库可以有Name“VSTS”或“vsts”等字段的大写或小写
我希望我的 LINQ 语句在任何情况下都可以执行。

在上面的 LINQ 语句中,如果我提供小写值并且数据库具有大写,则搜索失败..这是我不想要的。

4

5 回答 5

4

最好的选择是使用不区分大小写的序数比较,但是该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));
于 2013-02-12T10:49:08.457 回答
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();
于 2013-02-12T10:44:06.130 回答
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();
于 2013-02-12T10:49:27.933 回答
0

你可以试试ToLower()

myList = MyList.Where(x => x.Name.ToLower().Contains(SearchValue.ToLower()) 
    || x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();
于 2013-02-12T10:47:26.080 回答
0

尝试这个:

myList = MyList.Where(x => 
    x.Name.ToLower().Contains(SearchValue.ToLower()) || 
    x.Address.ToLower().Contains(SearchValue.ToLower())).ToList();

检查这是否适用于 Linq2Entity,可能是下层失败:p

于 2013-02-12T10:43:23.683 回答