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

これを試して:

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

これがLinq2Entityで機能するかどうかを確認します。これは、tolowerが失敗する可能性があります:p

于 2013-02-12T10:43:23.683 に答える
0

contains()を使用する必要がある場合は、次のことを試してください。

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

ただし、フィールドに完全な検索値が含まれていて、問題が大文字小文字のみである場合は、代わりにStingComparisonでEquals()を使用する必要があります。

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 に答える