LINQ中分组项的自动顺序编号

时间:2013-08-02 16:59:30

标签: c# performance linq sequential

我有两个列表,一个用于存储人员主要信息,另一个用于动态存储详细信息。但我需要一个列表来混合它们并在输出列表中添加一个序号。

E.G

MAIN

ID --- NAME   ---  AGE
 1 --- Jack   ---   23
 2 --- Robert ---   30
 3 --- Lee    ---   15

详情

ID -- MAINLinK -- Details
1  --    1     --  Tall         <= Jack
2  --    1     --  Thin         <= Jack
3  --    1     --  Blonde       <= Jack
4  --    2     --  Fat          <= Robert
5  --    3     --  Chinesse     <= Lee  
6  --    3     --  skinny       <= Lee

必填项目:

Id(MAIN) -- SequentialNUM  -- Name(MAIN)
1        --       1        --  Jack   
1        --       2        --  Jack
1        --       3        --  Jack
2        --       1        --  Robert
3        --       1        --  Lee
3        --       2        --  Lee

顺序号码是我真正需要的号码......

注意:这只是一个简单的示例,可以获得我真正需要的东西,而且我无法找到单独使用Linq语句来实现此目的的方法,而无需添加循环并创建更多对象。

提前感谢。

1 个答案:

答案 0 :(得分:3)

var list = MainList.Join(DetailsList, x=>x.ID, x=>x.MAINLink,(x,y)=> new {x,y})
                   .GroupBy(a=>a.x.ID)
                   .Select(g=>g.Select((k,i)=>new {k,i}))
                   .SelectMany(a=>a)
                   .Select((a)=> new {
                                     Main = a.k.x,
                                     SequentialNUM = a.i + 1,
                                     Detail = a.k.y
                                   })
                   .OrderBy(x=>x.Main.Id);