表1,名为:Table1
字段1,字段2,字段3
aa,bb,6
aa,bb,6.5
aa,bb,5
cc,dd,7
cc,dd,6
ee,ff,9字段1与字段2都相等的情况 取字段3最大的结果:
aa,bb,6.5
cc,dd,7
ee,ff,9有什么好的办法可以快速实现

解决方案 »

  1.   

    var query= from t in ds.Talbes[0].AsEnumerable()
               group t by new {字段1=t.Field<string>("字段1"),字段2=t.Field<string>("字段2")} into g
               select new {g.Key.字段1,g.Key.字段2,字段3=g.Max(s=>s.Field<double>("字段3")};
      

  2.   

    本人亲自试过,可以达到你要的效果!select 字段1 ,字段2,max(字段3) from Table1 group by 字段1,字段2
      

  3.   

    上面的回答第三个字段没有表头,下面的这个第三个地段有表头select 字段1 ,字段2,max(字段3) as ’字段3‘ from Table1 group by 字段1,字段2
      

  4.   

    s=>s.Field -----是在哪定义的呀
      

  5.   

    为什么对结果遍历不行,提示
    错误 1 “AnonymousType#1”不包含“GetEnumerator”的公共定义,因此 foreach 语句不能作用于“AnonymousType#1”类型的变量                foreach (var item in query)
                    {
                        foreach (var val in item)
                        {
                            addAppend("a");
                        }
                    }
      

  6.   

    你说的LINQ我就不太了解了,我只了解Sql的,不过语法应该差不多吧!
      

  7.   

    DataTable dt = new DataTable();
            dt.Columns.Add("字段1",typeof(string));
            dt.Columns.Add("字段2", typeof(string));
            dt.Columns.Add("字段3", typeof(decimal));
            dt.Rows.Add("aa","bb",6);
            dt.Rows.Add("aa","bb",6.5);
            dt.Rows.Add("aa","bb",5);
            dt.Rows.Add("cc","dd",7);
            dt.Rows.Add("cc","dd",6);
            dt.Rows.Add("ee", "ff", 9);
            var source = from temp in dt.AsEnumerable() group temp by new { 字段1 = temp.Field<string>("字段1"), 字段2 = temp.Field<string>("字段2") } into g select new { 字段1 = g.Key.字段1, 字段2 = g.Key.字段2, 字段3 = g.Max(t => t.Field<decimal>("字段3")) };
            foreach (var s in source)
            {
                Response.Write("<br/>");
                Response.Write(s.字段1 + "   " + s.字段2 + "    " + s.字段3);
            }