日期:2014-05-20  浏览次数:20881 次

LINQ 中的关于group by的问题
问题描述:就是从数据库中取出数据,经过group bu之后分组显示
两种方法:
1:建立一个实体数据模型,直接从映射之后的实体类中分组显示(发现了问题)
C# code

using (studentEntities entities =new studentEntities())
            {

                var item1 = (from c in entities.Score
                            group c by c.ID into g
                            select new
                            {
                                g.Key,
                                g
                            });

                foreach (var m in item1)
                {
                    if (m.Key == "11112")
                    {
                        foreach (var n in m.g)
                            Console.WriteLine(n.ID + "   " + n.course + "   " + n.score1);
                    }
                       
                }


出现的问题是,记录确实经过了分组,但是foreach之后显示出来的记录都被增加了一倍
为什么????
2:先将数据取出来放到一个我新建好的类中存起来放到list中,然后对list进行分组(没有出现上述问题)
C# code

class Program
    {
        static void Main(string[] args)
        {
            using (studentEntities entities = new studentEntities())
            {
                var v = from u in GetScore()
                        group u by u.Num into g
                        select new
                        {
                            Sss = g.Key,
                            Mdd = g
                        };

                foreach (var m in v)
                {
                    foreach(var n in m.Mdd)
                        Console.WriteLine(n.Num + "  " + n.Name + "  " + n.Fen);
                }

                Console.ReadLine();
            }
        }

        public static List<ScoreS> GetScore()
        {
            List<ScoreS> mylist = null;
            using (studentEntities entities = new studentEntities())
            {
                var v = from u in entities.Score
                        select new ScoreS
                        {
                            Num = u.ID,
                            Name = u.course,
                            Fen = u.score1
                        };

                mylist = v.ToList();
            }
            return mylist;
        }
    }


为什么记录会被加倍呢???难道非要先将数据存起来,再重新处理吗,不能直接处理吗

------解决方案--------------------
记录都被增加了一倍 是什么意思?
------解决方案--------------------
var item1 = (from c in entities.Score.ToList() group c by c.ID into g
select new
{
g.Key,
g
});


------解决方案--------------------
照理说 不应该的啊 延迟查询不会导致这样的问题的吧...
------解决方案--------------------
Try:


var item1 = (from c in entities.Score
group c by c.ID into g
select g).ToList();

------解决方案--------------------
你的Score表,是不是没有设置有主键?
------解决方案--------------------
探讨
对啊,没有设置主键,有问题吗
但是映射成类之后,自动加上主键列啊

------解决方案--------------------
难道是数据库设计得有问题,存在循环的字段关联?
------解决方案--------------------
也不对,单表操作应该不会。