2016-10-04 114 views
1

嗨我想從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

像這樣的東西應該工作:這個太

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; 
+0

遇到錯誤。 :( – yk1007

+0

編輯答案:添加GetResults並更改等於。請注意,ItemId現在是一個Guid,它應該可以工作(經過測試)。 – Gatogordo