2016-10-04 12 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

Got ошибка с этим тоже. :( – yk1007

+0

Отредактирован ответ: добавлены GetResults и измените значения. Обратите внимание, что ItemId теперь является Guid. Это должно работать (проверено). – Gatogordo

Смежные вопросы