从IQueryable中查找元素索引

时间:2016-10-04 07:55:39

标签: c# sitecore iqueryable

您好我正在尝试从IQueryable中找到特定元素的位置。我不想隐藏到列表然后搜索它,因为如果元素的数量很大,过程很重。

我试过.TakeWhile(x => x.ItemId.Equals(ItemId))但它显示我不支持的功能。 下面是我现在如何使用循环查询。有没有更好的方法呢?

IQueryable<CustomSearchResultItem> contextQueryable = context.GetQueryable<CustomSearchResultItem>().Where(query);
if (ItemId != ID.Null)
{
 int i = 0;
 foreach (var x in contextQueryable)
 {                            
  if(x.ItemId.Equals(ItemId))
  {
   Position = i;
   break;
  }
  i++;
 }
}

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

var contextQueryable = context.GetQueryable<CustomSearchResultItem>().Where(query).GetResults();
var result = contextQueryable.Select((x, i) => new { Item = x, Index = i })
   .FirstOrDefault(itemWithIndex => itemWithIndex.Item.Document.ItemId.Guid == ItemId);

if (result != null)
  index = result.Index;