我似乎无法让它发挥作用。
基本上我有一个网站列出了被排除的品牌和类别。它们存放像品牌/ 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 - (: AND)'---&gt; Lucene.Net.QueryParsers.ParseException:无法解析'(: AND)AND - (: AND)':遇到“”)“”)“”在第1行,第8栏。 期待以下之一: ... “+”...... “ - ”...... “(”...... “”...... ... ... ... ... “[”...... “{”...... ... ... “”...... ---&GT; Lucene.Net.QueryParsers.ParseException:遇到“”)“”)“”在第1行第8列。 期待以下之一: ... “+”...... “ - ”...... “(”...... “*”...... ... ... ... ... “[”...... “{”...... ... ...
答案 0 :(得分:1)
在查询期间,您无法执行包含需要计算且不使用索引的操作。 像这样使用查询:
List<Product> ps = session.Query<Product>()
.Where(prod => !prod.Brands.In(excludedBrands) &&
!prod.Categories.In(excludedCategories))
.OrderBy(a=>a.ProductGroup)
.Take(20)
.ToList();
如果您仍有问题,请在查询中调用ToString()并查看其实际功能。