2017-11-24 14 views
1

ColumnA 콘텐츠의 3 종류가 포함되어DataTable에 열 값 그룹화 및 정렬은 DataTable에의

  1. 숫자를 DataTable에의

ColumnB는 "YYYYMMDD를"날짜 형식을 포함 영숫자

  • 알파벳
  • .

    데이터를 3 가지 콘텐츠 유형에 따라 그룹화 한 다음 날짜 오름차순으로 정렬해야합니다.

    :

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

    ColumnA 값을 기준으로 그룹화 및 ColumnB 값에 따라 소트 : 이것에 대한

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

    우리가 될 것입니다 LINQ 솔루션?

  • +0

    여기에 도움이 답을 수행, https://stackoverflow.com/questions/4494342/c-sharp-doing-a-custom-sort-on-a-datatable –

    +0

    @ jason.kaisersmith을 주셔서 감사합니다 지적하지만이 요구 사항은 조금 다릅니다. – Hassan

    답변

    1

    정확한 코드는 다음과 같습니다. 예상되는 결과를 얻을 수 있습니다.

    //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