从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++;
 }
}

应该这样做:

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;

最新更新