我有一个搜索框,我已将数据分解为单词。我现在需要将这些单词中的每一个与数据库中的几个字段进行比较。这是我的代码:
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 as LIKE 语句。此外,数据库中的所有信息都是 nvarchars,因此它们等同于我的实体中的字符串。有谁知道问题是什么?使用 IQueryable 是最好的方法吗?如果可能的话,我宁愿延迟加载所有这些。