读书人

LINQ 中的关于group by的有关问题

发布时间: 2012-03-30 17:32:09 作者: rapoo

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表,是不是没有设置有主键?
[解决办法]
探讨
对啊,没有设置主键,有问题吗
但是映射成类之后,自动加上主键列啊

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



LINQ语句看着也没问题,再想想。
[解决办法]
try..

C# code
var item1 = (from c in entities.Score group c by c.ID select g)                     .ToDictionary(g => g.Key); foreach (var pk in item1){      if (pk.Key == "11112")      {           foreach (var n in pk.Value)               Console.WriteLine(n.ID + "   " + n.course + "   " + n.score1);      }                       }
[解决办法]
(g => g.ID)
[解决办法]
C# code
using (NorthwindEntities entities = new NorthwindEntities()){    var groupedResult = entities.Customers        .GroupBy(c => c.City)        .Select(g => new { g.Key, g });    foreach (var e in groupedResult)    {        if (e.Key=="London")            foreach (var c in e.g)            {                Console.WriteLine("{0}  {1}  {2}  {3}", c.CustomerID, c.City, c.ContactName, c.Country);            }    }} 

读书人网 >.NET

热点推荐