Заказ номера строки с использованием LinqToSql в asp.net/C# - PullRequest
2 голосов
/ 03 мая 2011

У меня есть набор записей в таблице базы данных, назовем ее Таблица компонентов, которая определяется как следует .

Администратор может отключить некоторые компоненты с помощью disableflag, который является последним столбцом таблицы. Если определенный компонент отключен, он не должен отображаться в сетке пользователя.

Я получаю данные из базы данных и представляю их в виде таблицы, как показано здесь , если вы наблюдаете, что значения SNo не в порядке.

Запрос linq, который я использую для извлечения данных:

var gridViewResults = from results in db.Components where results.DisableFlag == false
               select  new { SNo = results.SNo, ComponentNames = results.Component_Name, Size =   results.Size__in_MB_, Price = results.Price__in_SEK_, TotalDownloads = results.Total_Downloads, Description = results.Description };

Но я хочу, чтобы данные отображались в том порядке, в котором значение SNo равно 1, 2, 3, 4 без зависимости от значений SNO таблицы базы данных: для справки посмотрите this .

Я не могу понять, как использовать запрос linq для достижения этой цели:

Я пробовал этот запрос:

(db.Components.AsEnumerable().Select((iterator)=> new{iterator.SNo + 1}) 

Но я думаю, что это абсурд. Может ли кто-нибудь помочь мне в этом.

Спасибо в ожидании.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Если вы абсолютно уверены, что хотите игнорировать номера базы данных (зачем выводить числа, если они на самом деле не соответствуют никому?), Вы можете попробовать следующее:

var gridViewData = from results in db.Components
                   where results.DisableFlag == false
                   select new
                   {
                     ComponentNames = results.Component_Name,
                     Size = results.Size__in_MB_,
                     Price = results.Price__in_SEK_,
                     TotalDownloads = results.Total_Downloads,
                     Description = results.Description
                   };

var gridViewResults = gridViewData.AsEnumerable().Select((item, index) => new
                      {
                         SNo = index + 1,
                         ComponentNames = item.ComponentNames,
                         Size = item.Size,
                         Price = item.Price,
                         TotalDownloads = item.TotalDownloads,
                         Description = item.Description
                      });

РЕДАКТИРОВАТЬ: альтернативное решение из Как спроецировать номер строки в результаты запроса Linq

EDIT2: исправление для неподдерживаемого выбора с помощью SQL: Ошибка Linq - «NotSupportedException: неподдерживаемая перегрузка, используемая для оператора запроса« Выбор »»

1 голос
/ 04 мая 2011

Привет всем, здесь - окончательный ответ. Джошуа сделал всю работу. Большое ему спасибо. Просто хочу выделить ответ кому угодно с такой же проблемой на будущее. Если кто-то хочет проголосовать, пожалуйста, проголосуйте за Джошуа

var gridViewData = from results in db.Components
                           where results.DisableFlag == false
                           select new
                           {
                               ComponentNames = results.Component_Name,
                               Size = results.Size__in_MB_,
                               Price = results.Price__in_SEK_,
                               TotalDownloads = results.Total_Downloads,
                               Description = results.Description
                           };

        var gridViewResults = gridViewData.AsEnumerable().Select((item, index) => new
        {
            SNo = index + 1,
            ComponentNames = item.ComponentNames,
            Size = item.Size,
            Price = item.Price,
            TotalDownloads = item.TotalDownloads,
            Description = item.Description
        }).ToList();

Это должно работать.

...