Я не могу использовать ToListAsync после функции Where
Вы все еще можете ждать операции с БД, просто оберните операцию в скобках, чтобы общий результат был корректным типом:
var result = (await db.SomeEntity.ToListAsync())
.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));
И наоборот, вы можете выполнить всю операцию в два этапа:
var list = await db.SomeEntity.ToListAsync();
var result = list.Select(a => new {a, Rank(a, key})
.Where(obj => obj.Rank > 0));
В любом случае, это одно и то же.Select
и Where
в этом случае не делают ничего асинхронного, поэтому ждать больше нечего.Ваша операция с БД происходит на .ToList()
, а не на .Where()
.
Примечание. Если вообще , можно выполнить логику Rank()
в LINQ-to-Дерево выражений сущностей, которое, вероятно, будет лучшим вариантом в целом.Даже если это усложнит логику, если счет SomeEntity
достигнет какого-либо значительного значения, выигрыш в производительности очевиден.