How do I use SELECT GROUP BY in DataTable.Select(Expression)?

后端 未结 4 1820
刺人心
刺人心 2020-12-01 09:42

I try to remove the duplicate rows by select a first row from every group. For Example

PK     Col1     Col2
1        A        B
2        A        B
3                 


        
相关标签:
4条回答
  • 2020-12-01 09:52

    This solution sort by Col1 and group by Col2. Then extract value of Col2 and display it in a mbox.

    var grouped = from DataRow dr in dt.Rows orderby dr["Col1"] group dr by dr["Col2"];
    string x = "";
    foreach (var k in grouped) x += (string)(k.ElementAt(0)["Col2"]) + Environment.NewLine;
    MessageBox.Show(x);
    
    0 讨论(0)
  • 2020-12-01 09:55
    dt = dt.AsEnumerable().GroupBy(r => r.Field<int>("ID")).Select(g => g.First()).CopyToDataTable();
    
    0 讨论(0)
  • 2020-12-01 10:00

    DataTable's Select method only supports simple filtering expressions like {field} = {value}. It does not support complex expressions, let alone SQL/Linq statements.

    You can, however, use Linq extension methods to extract a collection of DataRows then create a new DataTable.

    dt = dt.AsEnumerable()
           .GroupBy(r => new {Col1 = r["Col1"], Col2 = r["Col2"]})
           .Select(g => g.OrderBy(r => r["PK"]).First())
           .CopyToDataTable();
    
    0 讨论(0)
  • 2020-12-01 10:10
    dt.AsEnumerable()
        .GroupBy(r => new { Col1 = r["Col1"], Col2 = r["Col2"] })
        .Select(g =>
        {
            var row = dt.NewRow();
    
            row["PK"] = g.Min(r => r.Field<int>("PK"));
            row["Col1"] = g.Key.Col1;
            row["Col2"] = g.Key.Col2;
    
            return row;
    
        })
        .CopyToDataTable();
    
    0 讨论(0)
提交回复
热议问题