Попробуйте использовать let, как это:
int[] ints = new[] { 1, 2, 3, 4, 5 };
int counter = 0;
var result = from i in ints
where i % 2 == 0
let number = ++counter
select new { I = i, Number = number };
foreach (var r in result)
{
Console.WriteLine(r.Number + ": " + r.I);
}
Я не могу проверить это с фактическим LINQ to SQL или Entity Framework прямо сейчас. Обратите внимание, что приведенный выше код сохранит значение счетчика между несколькими выполнениями запроса.
Если это не поддерживается вашим конкретным провайдером, вы всегда можете использовать foreach (что приводит к выполнению запроса) и назначать номер вручную в коде.