【发布时间】:2015-06-16 15:25:18
【问题描述】:
我遇到了一个有趣的 Linq to Sitecore 问题。我的情况是,我有一个人员目录和一个位置目录,这些目录都存储在 Sitecore 中。我正在尝试编写一个搜索功能,让我可以搜索附近的人。更令人担忧的是,人们可以与多个位置相关联。
到目前为止,方法是找到附近的位置,获取他们的 ID,然后找到与这些位置相关联的所有人员。
这大概是这样的:
var locations = GetNearbyLocations(lat, long, radius) // returns a list of short ID's
var searchPredicate = PredicateBuilder.True<SearchResultItem>();
var locationsPredicate = PredicateBuilder.False<SearchResultItem>();
foreach (var location in locations)
{
locationPredicate = locationPredicate.Or(x => x["location"] == location);
}
searchPredicate = searchPredicate.And(locationPredicate);
searchPredicate = searchPredicate.And(sri => sri.TemplateId == personTemplateId);
using (var context = index.CreateSearchContext())
{
var peopleReults = context.GetQueryable<SearchResultItem>.Where(locationPredicate).GetResults();
}
如果GetNearbyLocations 返回一组相对较小的位置,则上述方法非常有用。一旦超过 150 个左右,对GetQuerable 的调用将导致堆栈溢出。
【问题讨论】:
-
你能发布你收到的错误信息吗?
-
这是一个标准的 System.StackOverflowException 错误。
-
你能发布完整的错误堆栈吗?
标签: linq sitecore sitecore7 sitecore7.5