2012-03-13 7 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)を希望する場合上のリストでは、インデックスはSOLUB0001,SOLUB0002,INSOL0001,INSOL0002 ... CLRES0001,SUMCA0001、0123である必要があります。

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

関連する問題