当前位置:编程学习 > C#/ASP.NET >>

linq DataSet group 多字段 出现:必须至少有一个对象实现 IComparable 的错误。请我应该怎样解决??

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());
                 }
 
            }
--------------------编程问答-------------------- 你需要为 CWTMP 对应的类型实现 IComparable,才可以对它分组。

这很容易理解,要分组,就要知道哪些是相同的,哪些是不同的,相同的才能分组。

你也可以这样写:
...
group p.某个需要分组的属性 by new { p.Flag, p.YWB_HXT, p.YWB_YWID, p.YWB_DJID } into g
... --------------------编程问答-------------------- 但我这样实现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());
                }

            }
--------------------编程问答-------------------- orderby g.Key    
Key是什么类型?这个类型必须实现IComparable。
我刚才帮别人就解决了这个错误
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,