using System.Linq.Dynamic;
using System.Data.DataSetExtensions;
public static void Main()
DataTable dt2 = new DataTable("Order");
DataColumn dc2 = dt2.Columns.Add("ID", typeof (decimal));
dt2.Columns.Add("AMT", typeof (decimal));
dt2.Columns.Add("PERCENTAGE", typeof (decimal));
dt2.Columns.Add("COL1", typeof (String));
dt2.Columns.Add("COL2", typeof (String));
dt2.Rows.Add(6, 200, 100, "xxx", "yyy");
dt2.Rows.Add(8, 400, 100, "qqq", "fff");
dt2.Rows.Add(1, 300, 100, "eee", "aaa");
dt2.Rows.Add(1, 200, 100, "eee", "aaa");
dt2.Rows.Add(10, 400, 100, "sss", "vvv");
var dynamicQuery = string.Format("new (it.Field<decimal>(\"ID\"), it.Field<string>(\"COL1\"), it.Field<string>(\"COL1\"))");
var duplicates = dt2.AsEnumerable().GroupBy(dynamicQuery, "it");