.net 在LINQ Select子句中重置索引

.net 在LINQ Select子句中重置索引,.net,vb.net,linq,linq-to-objects,.net,Vb.net,Linq,Linq To Objects,我的LINQ查询: Dim groupedData = (From p In pData _ Group By p.TruncParam Into Group) _ .SelectMany(Function(g) g.Group) _ .Select(Function(d, idx) New With { _ .NewParameter = S

我的LINQ查询:

Dim groupedData = (From p In pData _
                   Group By p.TruncParam Into Group) _
                  .SelectMany(Function(g) g.Group) _
                  .Select(Function(d, idx) New With { _
                      .NewParameter = String.Concat(If(d.TruncParam.Length < 5, d.TruncParam, d.TruncParam.Substring(0, 5)), idx.ToString("0000")), _
                      .FullParameter = String.Format("{0}-{1} [{2}] <{3}>", d.LabName, d.TestName, d.Parameter, d.Unit)})
Dim groupedData=(来自pData中的p_
按p.TruncParam分组(分为组)_
.选择多个(功能(g)g.组)_
.用{_
.NewParameter=String.Concat(如果(d.TruncParam.Length<5,d.TruncParam,d.TruncParam.Substring(0,5)),idx.ToString(“0000”)_
.FullParameter=String.Format(“{0}-{1}[{2}]”,d.LabName,d.TestName,d.Parameter,d.Unit)})
产生以下结果:

ID: SOLUB0000  Name: 001-AMT SOLUBL  [SOLUBLES]       <%>
ID: SOLUB0001  Name: CHEM-C4:SOL     [SOLUBLES]       <%>
ID: SOLUB0002  Name: CHEM-EMCARB:SOL [SOLUBLES]       <%>
ID: INSOL0003  Name: 001-AMT:INSOL   [INSOLUBLES]     <%>
ID: INSOL0004  Name: CHEM-AMT:INSOL  [INSOLUBLES]     <%>
ID: INSOL0005  Name: CHEM-W:INSOL    [INSOLUBLES]     <%>
ID: INSOL0006  Name: CHEM-W:INSOL    [INSOLUBLES]     <mg/l>
ID: CLRES0007  Name: 001-CL RESIDUE  [CL RESIDUE]     <ppm>
ID: SUMCA0008  Name: 001-ELEMENTS    [SUM CA K NA SI] <%>
ID: SUMME0009  Name: 001-ELEMENTS    [SUM METALS + P] <%>
ID:SOLUB0000名称:001-AMT SOLUBL[SOLUBLES]
ID:SOLUB0001名称:CHEM-C4:SOL[SOLUBLES]
ID:SOLUB0002名称:CHEM-EMCARB:SOL[SOLUBLES]
ID:INSTA0003名称:001-AMT:INSTAL[不溶物]
ID:INSTA0004名称:CHEM-AMT:INSTAL[不溶物]
ID:INFOR0005名称:CHEM-W:INFORI[不溶物]
ID:INSTA0006名称:CHEM-W:INSTAL[不溶物]
ID:CLRES0007名称:001-CL残留物[CL残留物]
ID:SUMCA0008名称:001-元素[SUM CA K NA SI]
ID:SUMME0009名称:001-元素[SUM金属+P]
TruncParam
更改时,我希望
Select
子句中的索引(
idx
)重置为1。因此,在上面的列表中,索引应该是
SOLUB0001
SOLUB0002
insin0001
insin0002
CLRES0001
SUMCA0001
sume001


如何更改LINQ查询?

您需要在
SelectMany
语句(
g.Group.Select(d,idx)=>new{d,idx}
中移动索引选择,如下所示:

Dim groupedData = (From p In pData _
                   Group By p.TruncParam Into Group) _
    .SelectMany(Function(g) g.Group.Select(Function(d, idx) New With { _
        .Element = d, .Index = idx}) _
    .Select(Function(d) New With { _
        .NewParameter = String.Concat(If(d.Element.TruncParam.Length < 5, d.Element.TruncParam, d.Element.TruncParam.Substring(0, 5)), d.Index.ToString("0000")), _
        .FullParameter = String.Format("{0}-{1} [{2}] <{3}>", d.Element.LabName, d.Element.TestName, d.Element.Parameter, d.Element.Unit)})
Dim groupedData=(来自pData中的p_
按p.TruncParam分组(分为组)_
.SelectMany(函数(g)g.Group.Select(函数(d,idx)用{_
.Element=d,.Index=idx})_
.用{_
.NewParameter=String.Concat(如果(d.Element.TruncParam.Length<5,d.Element.TruncParam,d.Element.TruncParam.Substring(0,5)),d.Index.ToString(“0000”)_
.FullParameter=String.Format(“{0}-{1}[{2}]”,d.Element.LabName,d.Element.TestName,d.Element.Parameter,d.Element.Unit)})