C# 从IQueryable中查找元素的索引

C# 从IQueryable中查找元素的索引,c#,sitecore,iqueryable,C#,Sitecore,Iqueryable,嗨,我正在试图从IQueryable中找到特定元素的位置。我不想隐藏到列表,然后搜索它,因为如果元素的数量很大,那么这个过程很繁重 我尝试了.TakeWhile(x=>x.ItemId.Equals(ItemId)),但它显示的函数不受支持。 下面是我现在如何通过查询使用循环来完成它。有没有更好的方法 IQueryable<CustomSearchResultItem> contextQueryable = context.GetQueryable<CustomSearchRe

嗨,我正在试图从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++;
 }
}
IQueryable contextQueryable=context.GetQueryable().Where(查询);
if(ItemId!=ID.Null)
{
int i=0;
foreach(contextQueryable中的变量x)
{                            
如果(x.ItemId.Equals(ItemId))
{
位置=i;
打破
}
i++;
}
}

类似的方法应该可以:

var contextQueryable=context.GetQueryable().Where(query.GetResults();
var result=contextQueryable.Select((x,i)=>new{Item=x,Index=i})
.FirstOrDefault(itemWithIndex=>itemWithIndex.Item.Document.ItemId.Guid==ItemId);
如果(结果!=null)
索引=结果。索引;

编辑了答案:添加GetResults并更改等号。请注意,ItemId现在是Guid。这应该有效(经过测试)。