LINQ отображает номера строк - PullRequest
0 голосов
/ 10 мая 2010

Я просто хочу добавить номер строки к возвращенным результатам моего запроса.

Я нашел следующий пост, который описывает то, что я пытаюсь достичь, но дает мне исключение

http://vaultofthoughts.net/LINQRowNumberColumn.aspx

"Дерево выражений не может содержать оператор присваивания"

В MS SQL я бы просто использовал функцию ROWNUMBER (), я просто ищу эквивалент в LINQ.

Ответы [ 3 ]

2 голосов
/ 10 мая 2010

Используйте AsEnumerable(), чтобы оценить заключительную часть вашего запроса на клиенте, и в этой заключительной части добавьте столбец счетчика:

int rowNo = 0;
var results = (from data in db.Data
               // Add any processing to be performed server side
               select data)
              .AsEnumerable()
              .Select(d => new { Data = d, Count = ++rowNo });
2 голосов
/ 10 мая 2010

Я не уверен, поддерживает ли LINQ to SQL (но это возможно), но есть перегрузка на Queryable.Select , который принимает лямбда-индекс с индексатором , Вы можете написать свой запрос следующим образом:

db.Authors.Select((author, index) => new
{
    Lp = index, Name = author.Name
});

UPDATE:

Я провел несколько тестов, но, к сожалению, LINQ to SQL не поддерживает эту перегрузку (3.5sp1 и 4.0). Выдает NotSupportedException с сообщением:

Неподдерживаемая перегрузка, используемая для запроса оператор «Выбор».

0 голосов
/ 10 мая 2010

LINQ to SQL позволяет отображать функцию SQL. Хотя я не проверял это, я думаю, что эта конструкция будет работать:

public partial class YourDataContext : DatContext
{
    [Function(Name = "ROWNUMBER")]
    public int RowNumber()
    {
        throw InvalidOperationException("Not called directly.");
    }
}

И напишите запрос следующим образом:

from author in db.Authors
select new { Lp = db.RowNumber(), Name = author.Name };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...