Linq使用Select和Indexer

时间:2010-07-07 12:10:51

标签: c# linq

我有以下在LinqPad中成功运行的查询:

    var results = 
    from container in Container
    join containerType in ContainerType on container.ContainerType equals containerType
    where containerType.ContainerTypeID == 2
    select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID};

results.Dump();

我想更改select以使用索引器,以便select看起来像这样:

select new { ContainerID = container.ContainerID, TypeID = container.ContainerTypeID, ContainerIndex = index  };

我似乎无法做到的是选择使用select indexer的正确语法。

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

您无法使用查询表达式格式获取索引,但可以使用点标记来使用overload for Select。您可以坚持使用大部分查询表达式格式,然后在额外的选择投影中添加索引:

var tmp = 
    from container in Container
    join containerType in ContainerType
      on container.ContainerType equals containerType
    where containerType.ContainerTypeID == 2
    select new { ContainerID = container.ContainerID,
                 TypeID = container.ContainerTypeID};

var results = tmp.Select((x, index) => new { x.ContainerID, x.TypeID, 
                                             ContainerIndex = index });

答案 1 :(得分:1)

我可能遗漏了一些内容,但如果Container中的项目已经拥有属性ContainerTypeID,我就不明白为什么需要加入。在我看来,加入ContainerType并未提供此操作所需的任何额外属性。

因此:

Container
    .Where(c => c.ContainerTypeID==2)
    .Select((c,i) => new {c.ContainerID, c.TypeID, Index = i})