【问题标题】:add a new column to list using linq and entity?使用 linq 和实体向列表添加新列?
【发布时间】:2013-04-29 10:55:57
【问题描述】:

我想在列表中添加一个新列“Id”,我正在使用 Linq 和实体框架从数据库中检索数据,我有 12 行,我需要添加一个新列“Id”,该列应该从1 到 12 基于我从数据库中获取的行数,id 应该从 1 开始递增

这是我的查询

var Details = db.Details.Include(p => p.Name).Include(p => p.Gender);

问题在于,我还在为我的网格实现分页,当我再次单击下一页时,行号是从 sno 1 生成的,当我的第 1 页包含第 1 到第 5 行的记录时,我的第 2 页行号应该从第 6 行开始,但我的第 2 页行号再次从第 1 行开始..

我发布了我获取数据并将数据绑定到网格的流程

在第一步中,我有我的模型 User.cs,它与数据库交互并获取数据并将数据存储在 List<>

在下一步中,我从我的控制器操作方法中调用我的模型 User.cs 中的方法,该方法将从数据库中获取数据并将其存储在 List<>

在第三步中,从我的角度来看,我将我的 webgrid 的源属性提供给我的模型中保存数据的列表

【问题讨论】:

  • 我认为您使用 Include 错误。 Include 用于急切加载相关表格。

标签: c# linq entity-framework


【解决方案1】:

如果您想同时对结果进行分页和索引。试试这个:

var Details = db.Details.Skip(page*pageSize)
                        .Take(pageSize)
                        .ToList()
                        .Select((p,i)=> new {Id = i,Detail = p});

【讨论】:

    【解决方案2】:

    我建议你使用SkipTake

    public List<Details> GetDetails(int page, DbContext db)
    {
       const int pageSize = 5;
       db.Details.Skip( (page*pageSize) ).Take(pageSize).ToList();
    }
    

    这将消除对“索引”列的需要。这是一件好事,因为您不能将列/属性添加到类型,并且仍然具有相同的类型。

    例如如果要返回 List&lt;Details&gt;,则必须将属性 Id 添加到类型 Details

    一些文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2019-09-03
      相关资源
      最近更新 更多