2012-03-13 99 views
0

我的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)}) 

可生產這些結果:

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] <%> 

TruncParam的變化,我想Select子句中的指數(idx)重置因此,在上面的列表中,索引應該是SOLUB0001SOLUB0002,INSOL0001, INSOL0002 ... CLRES0001,SUMCA0001, SUME0001

我該如何改變LINQ查詢?

回答

1

你需要移動索引選擇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)}) 
+0

謝謝,@Alex,即做到了。 – blueshift 2012-03-14 02:00:21