2

我在数据库表中有一组记录,我们将其称为组件表,其定义如下

管理员可以使用表的最后一列 disableflag 禁用某些组件。如果某个特定组件被禁用,则它不应出现在用户的网格视图中。

如果您观察到 SNo 值不按顺序,我正在从数据库中获取数据并通过 gridview 显示,如此处所示。

我用来检索数据的 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}) 

但我认为这是荒谬的。有人可以帮我解决这个问题。

感谢期待。

4

2 回答 2

2

如果您绝对确定要忽略数据库编号(如果它们实际上不对应任何内容,为什么要输出这些数字?)您可以尝试以下操作:

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:不支持的重载用于查询运算符'Select'”

于 2011-05-03T19:49:33.447 回答
1

大家好,这里是最终答案。约书亚做了所有的工作。非常感谢他。只想向未来遇到同样问题的人强调答案。如果有人想投票,请投票给约书亚

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();

这应该有效。

于 2011-05-03T20:33:14.043 回答