2017-11-24 3 views
1

ColumnA der Datentabelle Sortier enthält 3 Art des Inhalts:Table Spaltenwert Gruppierung und

  1. Numeric
  2. Alphanumeric
  3. Alphabete

ColumnB der Datentabelle enthält, Datumformat "YYYYMMDD" .

Ich brauche Daten gruppiert basierend auf 3 Inhaltstypen und sortieren dann nach Datum in aufsteigender Reihenfolge.

Beispiel:

 
ColumnA | ColumnB 
A123457 | 20171114 
B246734 | 20171009 
1234544 | 20170808 
6789033 | 20171220 
ABBCDEE | 20180102 
A112233 | 20160202 
1212122 | 20171115 
NNNNNNN | 20171011 

auf ColumnA Wert basierend Gruppierung und auf ColumnB Wert basierend Reihenfolge:

 
ColumnA | ColumnB 
1234544 | 20170808 
1212122 | 20171115 
6789033 | 20171220 

A112233 | 20160202 
B246734 | 20171009 
A123457 | 20171114 

NNNNNNN | 20171011 
ABBCDEE | 20180102 

Was werden wir LINQ Lösung dafür sein?

+0

Sie die Antworten hier Hilfe: https://stackoverflow.com/questions/4494342/c-sharp-doing-a-custom-sort-on-a-datatable –

+0

@ jason.kaisersmith, danke für darauf hinweisen, aber diese Anforderung ist etwas anders. – Hassan

Antwort

1

Unten ist nicht der genaue Code, durch den unten beschriebenen Weg können Sie das erwartete Ergebnis erzielen.

//sort the date and put into same list 
CultureInfo provider = CultureInfo.InvariantCulture; 
        myList.ForEach(i => { i.ColumnB = DateTime.ParseExact(i.ColumnB, "YYYYMMDD", provider);}); 

//check for regex match and add to list 
        mynumericlist = myList.Where(x => Regex.IsMatch(x.columnA, @"^\d$")).ToList().OrderBy(x=>x.ColumnB); 
        myalphalist = myList.Where(x => Regex.IsMatch(x.columnA, @"^[a-zA-Z]*$")).ToList().OrderBy(x => x.ColumnB); 
        myalpnumlist = myList.Where(x => Regex.IsMatch(x.columnA, @"^[a-zA-Z0-9]*$")).ToList().OrderBy(x => x.ColumnB); 

        //then combine all