我有一個搜索框,我已經將數據分成字建。我現在需要將這些單詞與數據庫中的幾個字段進行比較。這裏是我的代碼:LINQ到實體凡遍歷數據
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是最好的方法嗎?如果可能的話,我寧願懶加載所有這些。
的聲音有點像它的窒息'searchValues [0]';如果存儲了一個變量,並且使用了'Where'子句中會發生什麼? –
原來,完美的作品。我非常專注於其他我甚至沒有想到的事情。 – PCasagrande