Мне нужно получить индекс (позицию) элемента при фильтрации по условию.
Вот код для фильтрации по условию:
var rank = await _dbContext.VwJobSupplierWithScores
.OrderBy(x => x.CalculatedSpendCurrencyJob)
.FirstOrDefaultAsync(x => x.JobId == jobId && x.SupplierKey == supplierKey);
Мне нужно получить позицию элемента в коллекции, которая возвращается до .FirstOrDefaultAsync
Как я могу это сделать?
Вы можете использовать следующее:
var rankPair = await _dbContext.VwJobSupplierWithScores
.OrderBy(x => x.CalculatedSpendCurrencyJob)
.Select((x, i) => new { item = x, index = i })
.Where(pair => pair.item.JobId == jobId && pair.item.SupplierKey == supplierKey)
.FirstOrDefaultAsync();
var rank = rankPair.item;
int index = rankPair.index;
@MatthewWatson An expression tree may not contain a tuple literal
с (item: x, index: i)
Не переводится в перегрузку SQL Select
.
@EugeneSukh Очевидно, ValueTuple плохо работает с EF. Вместо этого вы можете использовать анонимный объект.
@MatthewWatson Да, это была оплошность. Я все равно перешел на анонимный тип.
Разве это не должно быть
(item: x, index: i)
, а не(item = x, index = i)
?