Lucene Sitecore内容搜索谓词Builder与IEnumerable

Lucene Sitecore内容搜索谓词Builder与IEnumerable,lucene,sitecore,predicatebuilder,sitecore7.2,computed-field,Lucene,Sitecore,Predicatebuilder,Sitecore7.2,Computed Field,我在查询IEnumerable计算索引字段时遇到问题。我正在使用Sitecore 7.2 upd2、Lucene、ContentSearch和PredicateBuilder 我正在尝试查询产品部分下的产品价格。要找到可用的产品,有一些重要的逻辑,所以我决定将所有可用的产品价格都放在计算字段中。不幸的是,看起来我无法使用PredicateBuilder查询价目表 我的查询如下所示: predicate = predicate.And(p => p.Prices.Any(x => x

我在查询IEnumerable计算索引字段时遇到问题。我正在使用Sitecore 7.2 upd2、Lucene、ContentSearch和PredicateBuilder

我正在尝试查询产品部分下的产品价格。要找到可用的产品,有一些重要的逻辑,所以我决定将所有可用的产品价格都放在计算字段中。不幸的是,看起来我无法使用PredicateBuilder查询价目表

我的查询如下所示:

predicate = predicate.And(p => p.Prices.Any(x => x >= priceFrom && x <= priceTo));

有什么想法吗?

错误源于
Any()
方法调用的参数


Sitecore内容搜索LINQ有一些限制。其中之一是方法只接受“常量表达式”(对象)作为参数。您正在传递一个“lamda表达式”作为Any方法的参数。

我建议将每个产品的最低和最高价格索引为索引中单独的计算字段(十进制)

这将大大简化您的查询:

var results = context.GetQueryable<ProductSearchResultItem>
    .Where(p => p.MinPrice >= myPrice)
    .Where(p => p.MaxPrice <= myPrice)
    .GetResults();
var results=context.GetQueryable
.其中(p=>p.MinPrice>=myPrice)

.Where(p=>p.MaxPrice是的,似乎是这样,我也尝试了plain.Count()-但运气不好。所以看起来我真的不能在IEnumerable.Hmm上做任何简单的操作。可能是对any()的实际调用,而不是我所说的Lambda。这是我最初的计划:)但是当节中的产品价格为{100200300}时,它失败了你要找的是225到250之间的价格。在这种情况下,搜索不应返回此节。但是,如果我只使用最大(300)和最小(100)价格进行比较,它会。无论如何谢谢你!如何在Sitecore中存储价格并将其与产品关联?您是在电子商务模块中使用PriceMatrix字段,还是与产品关联的单独项目等?
Invalid Method Call Argument Type: Field - FieldNode - Field: prices -     System.Collections.Generic.IEnumerable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]. Only constant arguments is supported.
var results = context.GetQueryable<ProductSearchResultItem>
    .Where(p => p.MinPrice >= myPrice)
    .Where(p => p.MaxPrice <= myPrice)
    .GetResults();