1

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

例如

主要的

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 语句来执行此操作的方法。

提前致谢。

4

1 回答 1

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);
于 2013-08-02T17:19:41.897 回答