您好我正在尝试从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++;
}
}
答案 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;