简体   繁体   中英

datatable c# complex sorting inside datatable

i have a complex datatable that looks like this:

Batch ID    Batch 1 barcode THC     TECAN POS   TECAN ID    Sample Position Sample Name Data File   Method  Sample Type Level Name
Plate ID    1               VIAL1   blank1  D:\MassHunter\data\Batch 1 barcode THC_PAIN\blank1  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
Plate POS   1               VIAL1   blank2  D:\MassHunter\data\Batch 1 barcode THC_PAIN\blank2  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            A01 THCCAL1 P1-A01  THCCAL1 D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCCAL1 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 1
            B01 THCCAL2 P1-B01  THCCAL2 D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCCAL2 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 2
            C01 THCCAL3 P1-C01  THCCAL3 D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCCAL3 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 3
            D01 THCCAL4 P1-D01  THCCAL4 D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCCAL4 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 4
            E01 THCQC1  P1-E01  THCQC1  D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCQC1  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            F01 THCQC2  P1-F01  THCQC2  D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCQC2  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            G01 THCQC3  P1-G01  THCQC3  D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCQC3  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            H01 THCQC4  P1-H01  THCQC4  D:\MassHunter\data\Batch 1 barcode THC_PAIN\THCQC4  D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            A02 F862577 P1-A02  F862577 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862577 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            B02 F805357R    P1-B02  F805357R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F805357R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            C02 N070148R    P1-C02  N070148R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\N070148R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            D02 F862594 P1-D02  F862594 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862594 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            E02 F860417R    P1-E02  F860417R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F860417R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            F02 F862586 P1-F02  F862586 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862586 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            G02 F862567 P1-G02  F862567 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862567 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            H02 F862582 P1-H02  F862582 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862582 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            A03 F838208R    P1-A03  F838208R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F838208R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            B03 F760563R    P1-B03  F760563R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F760563R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            C03 F862580 P1-C03  F862580 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862580 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            D03 F863980R    P1-D03  F863980R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F863980R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            E03 F715588RC   P1-E03  F715588RC   D:\MassHunter\data\Batch 1 barcode THC_PAIN\F715588RC   D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            F03 N007466 P1-F03  N007466 D:\MassHunter\data\Batch 1 barcode THC_PAIN\N007466 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            G03 F808804R    P1-G03  F808804R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\F808804R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            H03 F945367 P1-H03  F945367 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F945367 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            A04 F862568 P1-A04  F862568 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862568 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            B04 N043919R    P1-B04  N043919R    D:\MassHunter\data\Batch 1 barcode THC_PAIN\N043919R    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            C04 F379160 P1-C04  F379160 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F379160 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            D04 F742173 P1-D04  F742173 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F742173 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            E04 F862574 P1-E04  F862574 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F862574 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            F04 F365407 P1-F04  F365407 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F365407 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            G04 F760668 P1-G04  F760668 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F760668 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            H04 F365408 P1-H04  F365408 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F365408 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            A05 F745746 P1-A05  F745746 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F745746 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  
            B05 F882245 P1-B05  F882245 D:\MassHunter\data\Batch 1 barcode THC_PAIN\F882245 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample  

as you can see i have a few rows as the header on top. and the rest of the data is sorted by A01, B01, C01,...,A02,B02,...,

however. i need to pick out all words in the second column that say "BLANK" and put them on top like this:

Batch ID    16035       TECAN POS   TECAN ID    Sample Position Sample Name Data File   Method  Sample Type Level Name
Plate ID    1               VIAL1   blank1  D:\MassHunter\data\16035_PAIN\blank1    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
Plate POS   1               VIAL1   blank2  D:\MassHunter\data\16035_PAIN\blank2    D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            A01     P1-A01  Calibr_01   D:\MassHunter\data\16035_PAIN\Calibr_01 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 1
            B01     P1-B01  Calibr_02   D:\MassHunter\data\16035_PAIN\Calibr_02 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 2
            C01     P1-C01  Calibr_03   D:\MassHunter\data\16035_PAIN\Calibr_03 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 3
            D01     P1-D01  Calibr_04   D:\MassHunter\data\16035_PAIN\Calibr_04 D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Calibration 4
            E01 QC1 P1-E01  QC1 D:\MassHunter\data\16035_PAIN\QC1   D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            F01 QC2 P1-F01  QC2 D:\MassHunter\data\16035_PAIN\QC2   D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            G01 QC3 P1-G01  QC3 D:\MassHunter\data\16035_PAIN\QC3   D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            H01 QC4 P1-H01  QC4 D:\MassHunter\data\16035_PAIN\QC4   D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            A02 BLANK0031   P1-A02  BLANK0031   D:\MassHunter\data\16035_PAIN\BLANK0031     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            D02 BLANK0028   P1-D02  BLANK0028   D:\MassHunter\data\16035_PAIN\BLANK0028     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            B05 BLANK0026   P1-B05  BLANK0026   D:\MassHunter\data\16035_PAIN\BLANK0026     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            C06 BLANK0025   P1-C06  BLANK0025   D:\MassHunter\data\16035_PAIN\BLANK0025     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            E09 BLANK0027   P1-E09  BLANK0027   D:\MassHunter\data\16035_PAIN\BLANK0027     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            F10 BLANK0029   P1-F10  BLANK0029   D:\MassHunter\data\16035_PAIN\BLANK0029     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            G11 BLANK0030   P1-G11  BLANK0030   D:\MassHunter\data\16035_PAIN\BLANK0030     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            H12 BLANK0032   P1-H12  BLANK0032   D:\MassHunter\data\16035_PAIN\BLANK0032     D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            B02 G085414     P1-B02  G085414     D:\MassHunter\data\16035_PAIN\G085414       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            C02 G085410     P1-C02  G085410     D:\MassHunter\data\16035_PAIN\G085410       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            E02 G143846     P1-E02  G143846     D:\MassHunter\data\16035_PAIN\G143846       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            F02 G085412     P1-F02  G085412     D:\MassHunter\data\16035_PAIN\G085412       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            G02 G215112     P1-G02  G215112     D:\MassHunter\data\16035_PAIN\G215112       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            H02 G143845     P1-H02  G143845     D:\MassHunter\data\16035_PAIN\G143845       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            A03 G085409     P1-A03  G085409     D:\MassHunter\data\16035_PAIN\G085409       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            B03 G143847     P1-B03  G143847     D:\MassHunter\data\16035_PAIN\G143847       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            C03 G143849     P1-C03  G143849     D:\MassHunter\data\16035_PAIN\G143849       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            D03 G071181     P1-D03  G071181     D:\MassHunter\data\16035_PAIN\G071181       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            E03 G143878     P1-E03  G143878     D:\MassHunter\data\16035_PAIN\G143878       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            F03 G071178     P1-F03  G071178     D:\MassHunter\data\16035_PAIN\G071178       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            G03 G071179     P1-G03  G071179     D:\MassHunter\data\16035_PAIN\G071179       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            H03 G071196     P1-H03  G071196     D:\MassHunter\data\16035_PAIN\G071196       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            A04 G202923     P1-A04  G202923     D:\MassHunter\data\16035_PAIN\G202923       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            B04 N169279     P1-B04  N169279     D:\MassHunter\data\16035_PAIN\N169279       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            C04 F961880     P1-C04  F961880     D:\MassHunter\data\16035_PAIN\F961880       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   
            D04 G143844     P1-D04  G143844     D:\MassHunter\data\16035_PAIN\G143844       D:\MassHunter\methods\use_these_methods\PAIN_FINAL.m    Sample   

does anyone know how to do it? any help would be tremendously appreciated!

Stop using a data table.

Build a class that represents these values with the appropriate semantics. Then sort the objects with a custom comparer.

By following this advice, you will solve not only this problem, but also the next thirty-five problems that are down the road a bit.

And make sure you intern strings that are the same thing over and over again to save memory.

myDataFile.Method = string.Intern((string)reader["Method"]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM