var zq =
                 from p in sGERPDataSet.CWTMP
                 group p by new { p.Flag, p.YWB_HXT, p.YWB_YWID, p.YWB_DJID } into g
                 orderby g.Key
                 select
             new
             {
                 g.Key,
                 NumProducts = g.Count(),
                 g
             };
             foreach (var _v in zq)     //执行到这里,出现:必须至少有一个对象实现 IComparable  的错误。请我应该怎样解决??
             {
                 MessageBox.Show(_v.Key.ToString());
 
                MessageBox.Show(_v.NumProducts.ToString());
 
                foreach (var _vv in _v.g)
                 {
                     MessageBox.Show(_vv.Flag.ToString() + _vv.YWB_HXT.ToString());
                 }
 
            }

解决方案 »

  1.   

    你需要为 CWTMP 对应的类型实现 IComparable,才可以对它分组。这很容易理解,要分组,就要知道哪些是相同的,哪些是不同的,相同的才能分组。你也可以这样写:
    ...
    group p.某个需要分组的属性 by new { p.Flag, p.YWB_HXT, p.YWB_YWID, p.YWB_DJID } into g
    ...
      

  2.   

    但我这样实现IComparable 也分不出来啊??? :
          class tmpKey : IComparable<tmpKey>
            {
                public  int _Flag;
                public string _YWB_HXT;
                public string _YWB_YWID;
                public string _YWB_DJID;            public int CompareTo(tmpKey _key)
                {               
                    if (_Flag.CompareTo(_key._Flag) != 0)
                        return _Flag.CompareTo(_key._Flag);
                    else if (_YWB_HXT.CompareTo(_key._YWB_HXT) != 0)
                        return _YWB_HXT.CompareTo(_key._YWB_HXT);
                    else if (_YWB_YWID.CompareTo(_key._YWB_YWID) != 0)
                        return _YWB_YWID.CompareTo(_key._YWB_YWID);
                    else
                        return _YWB_DJID.CompareTo(_key._YWB_DJID);            
                }
            }
       var zq =
                    from p in sGERPDataSet.CWTMP
                    group p by new tmpKey { _Flag = p.Flag, _YWB_HXT = p.YWB_HXT, _YWB_YWID = p.YWB_YWID, _YWB_DJID=p.YWB_DJID } into g
                    orderby g.Key
                    select
                new
                {
                    g.Key,
                    NumProducts = g.Count(),
                    g
                };
                foreach (var _v in zq)
                {
                    MessageBox.Show(_v.Key._Flag + _v.Key._YWB_HXT + _v.Key._YWB_YWID + _v.Key._YWB_DJID);                MessageBox.Show(_v.NumProducts.ToString());                foreach (var _vv in _v.g)
                    {
                        MessageBox.Show(_vv.Flag.ToString() + _vv.YWB_HXT.ToString());
                    }            }
      

  3.   

    orderby g.Key    
    Key是什么类型?这个类型必须实现IComparable。
    我刚才帮别人就解决了这个错误