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); } }}