検索ボックスがあり、データを単語に分割しました。次に、これらの各単語をデータベース内のいくつかのフィールドと比較する必要があります。これが私が持っているコードです:
List<string> searchValues = searchString.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).ToList();
using (DatabaseEntities context = new DatabaseEntities())
{
IQueryable<DatabaseType> returnValue =
context.DatabaseType.Where(y =>
y.Field1.Contains(searchValues[0]) ||
y.Field1.Contains(searchValues[0]));
searchValues.Skip(1).ToList().ForEach(x =>
{
returnValue = returnValue.Where(y =>
y.Field1.Contains(x) ||
y.Field2.Contains(x));
});
return returnValue.ToList();
私の目標は、実際にアイテムをメモリにロードする前に、完全なクエリを作成することです。ただし、これを実行しようとすると、次のエラーが発生します。
System.NotSupportedException: LINQ to Entities does not recognize the method 'System.String get_Item(Int32)' method, and this method cannot be translated into a store expression.
このタイプのエラーは、SQLへの変換で実行しようとしている操作が機能しないことを意味すると思っていましたが、以前は、ContainsをLIKEステートメントとして使用したことがあると確信しています。また、データベース内のすべての情報はnvarcharsであるため、これらは私のエンティティの文字列に相当します。誰かが問題が何であるかを知っていますか?これを行うには、IQueryableを使用するのが最善の方法ですか?可能であれば、これらすべてを遅延ロードすることをお勧めします。