2014-07-18 81 views
0

我似乎無法得到此工作。RavenDB查詢不起作用

基本上我有一個網站有一個排除的品牌和類別的列表。這是存儲的品牌/ 1類/ 123

我想查詢我的產品文檔,並返回沒有任何排除的類別/品牌的前20個結果。

using (var session = documentStore.OpenSession()) 
{ 
     var site = session.Load<Site>(193); 


     List<string> excludedCategories = session.Load<Category>(site.ExcludedCategories).Select(a => string.Format("brands/{0}",a.Id)).ToList(); 
     var excludedBrands = session.Load<Brand>(site.ExcludedBrands).Select(a => string.Format("categories/{0}",a.Id)).ToList(); 


     List<Product> ps = session.Query<Product>() 
           .Where(prod => excludedBrands.Any(a => !prod.Brands.Contains(a)) 
              && excludedCategories.Any(a => !prod.Categories.Contains(a))) 
           .OrderBy(a=>a.ProductGroup) 
           .Take(20) 
           .ToList(); 
} 

任何人都讓我知道,如果我在正確的路線?

目前得到以下錯誤:

Lucene.Net.QueryParsers.ParseException:無法解析: '( AND)和 - ( AND)' ---> Lucene.Net。 QueryParsers.ParseException:無法解析 '( AND)和 - ( AND)':遇到 「 」)「」) 「」 第1行,列8 期待之一: ... 「+」... 「 - 」... 「(」... 「「... ... ... ... ... 」[「 ...... 」{「 ... ... ... 」「... ---> Lucene.Net.QueryParsers.ParseException:遇到「」)「」)「」在第1行第8列。 期待以下之一: ... 「+」... 「 - 」 ... 「(」 ... 「*」 ... ... ... ... ... 「[」 ...... 「{」 ... ... ...

回答

1

在查詢過程中,您不能執行Contains操作,這需要計算並且不使用索引。 使用查詢,像這樣:

List<Product> ps = session.Query<Product>() 
          .Where(prod => !prod.Brands.In(excludedBrands) && 
          !prod.Categories.In(excludedCategories)) 
          .OrderBy(a=>a.ProductGroup) 
          .Take(20) 
          .ToList(); 

如果您仍然有問題,致電查詢的ToString(),看看它實際上做。