次のコードがあります
var returnData = DemoData.Books.AsQueryable();
if (criteria.Author != string.Empty)
{
returnData = returnData.Where(x => x.Author.Contains(criteria.Author));
}
Where句で大文字と小文字を区別しないようにするにはどうすればよいですか?
ToLower()
関数を使用できます。 ToLower
は、文字列をすべて小文字に変更します。文字列全体を変換します。既に小文字になっている文字や数字は変更しません。文字列をコピーし、新しい文字列への参照を返します。そのため、クエリの外部でcriteria.Author.ToLower()
を宣言する方が常に良いオプションです。
_string lowerAuthor = criteria.Author.ToLower();
returnData = returnData.Where
(x => x.Author.ToLower().Contains(lowerAuthor));
_
IndexOf
enumでStringComparison
overloadを使用することもできます。 ToLower()
よりもパフォーマンスが向上します。このオーバーロードのシグネチャは次のとおりです。
_int string.IndexOf(string value, StringComparison comparisonType);
_
_returnData = returnData.Where
(x => x.Author.IndexOf(criteria.Author, StringComparison.CurrentCultureIgnoreCase) != -1);
_
returnData = returnData.Where
(x => x.Author.IndexOf(criteria.Author, StringComparison.CurrentCultureIgnoreCase) != -1)
追加の文字列の割り当ては一切行われません。
LINQ to Objectsクエリであると想定しました。