Linq クエリ内の文字列配列で Array.Contains を使用しようとしています。
var otherMatchingDevices = from d in selectedDevices
from c in mldb.Companies
where d.CompanyID == c.CompanyID && c.Deleted == 0
where searchTerms.Contains(d.Name.ToString(), StringComparer.CurrentCultureIgnoreCase) || searchTerms.Contains(c.CompanyName.ToString(), StringComparer.CurrentCultureIgnoreCase)
select d;
クエリが評価されると、「サポートされていないオーバーロードがクエリ演算子 'Contains' に使用されています。
StringComparer を使用してこのコードをテストしたところ、正常に動作し、「fOO」が出力されました。
string[] sList = { "fOO", "bar" };
string[] array = { "foo" };
List<string> stringlist = sList.ToList();
var qry = from s in stringlist
where array.Contains(s, StringComparer.CurrentCultureIgnoreCase)
select s;
if (qry.Count() > 0) Console.WriteLine(qry.First().ToString());
Linq クエリ内で大文字と小文字を区別しない Array.Contains を使用する方法を教えてもらえますか? 元の文字列 ToUpper() または ToLower() は高価であり、元のデータが変更されるため、変換したくありません。