【问题标题】:DataTable Column value grouping and sortingDataTable 列值分组和排序
【发布时间】:2017-11-24 05:26:24
【问题描述】:

ColumnA的DataTable包含3类内容:

  1. 数字
  2. 字母数字
  3. 字母

ColumnB 的 DataTable 包含日期格式“YYYYMMDD”。

我需要根据 3 种内容类型对数据进行分组,然后按日期升序排序。

例子:

A 栏 | B栏 A123457 | 20171114 B246734 | 20171009 1234544 | 20170808 6789033 | 20171220 ABBCDEE | 20180102 A112233 | 20160202 1212122 | 20171115 NNNNNN | 20171011

基于ColumnA值的分组和基于ColumnB值的排序:

A 栏 | B栏 1234544 | 20170808 1212122 | 20171115 6789033 | 20171220 A112233 | 20160202 B246734 | 20171009 A123457 | 20171114 NNNNNN | 20171011 ABBCDEE | 20180102

我们将为此提供什么 LINQ 解决方案?

【问题讨论】:

标签: c# linq sorting datatable grouping


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2019-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多