【问题标题】:adding index to linq query result将索引添加到 linq 查询结果
【发布时间】:2011-02-15 02:25:09
【问题描述】:

我有一个返回 MyObject 列表的 linq 查询。我想向 MyObject 添加一个名为 TheIndex 的属性,其中包含序列中项目的纵坐标。

换句话说,我需要这样的东西:

var TheResult = from d in MyDataContext
                where.....
                select new MyObject
                {
                   Property1 = d.whatever,

                   TheIndex = ?

                 }

查询返回 MyObject 列表,我希望列表中的每个项目都包含索引作为其属性之一。

谢谢。

【问题讨论】:

标签: c# asp.net linq


【解决方案1】:

一旦你摆脱了查询语法,你会发现一个 Select 重载,它为你提供了你正在寻找的索引。

var result = MyDataContext
   .Where(d => d.Prop == "A")
   .AsEnumerable()
   .Select((d, i) => 
      new MyObject() {
         Property1 = d.whatever,
         TheIndex = i
    });

【讨论】:

  • 就在select语句之前,括号有错误:查询体必须以select子句或group子句结尾。
  • 是的 - 我解决了这个问题。就像我现在一样,完全放弃查询语法并使用方法语法。
  • 当我转换为方法语法时,我没有得到任何智能感知:我做错了吗?在查询语法中,我有 var Output = from d in MyDC.Table1 where d.UserID == TheUserId where d.Date == TheDate.Date select new Model{...}。
  • 我已经在语法方面修复了它,但在运行时出现错误:不支持的重载用于查询运算符
  • Adam 提到的重载仅在 LINQ to Objects 中实现,而不在 LINQ to SQL 中实现。最简单的解决方法可能是使用 AsEnumerable:.Select(d => d.whatever).AsEnumerable().Select((w, i) => new MyObject { Property1 = w, TheIndex = i })。 AsEnumerable 强制使用 LINQ to Objects 处理第二个 Select。 (您可以省略第一个 Select 并在 AsEnumerable 之后执行所有操作,但这会下载所有数据库列,而不仅仅是“whatever”列,因此分成两个 Select 会更有效。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多