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

LINQ高手帮忙
班级 姓名 课程 得分
一班 张三 语文 78
一班 张三 数学 88
一班 张三 英语 98
一班 李四 语文 60
一班 李四 数学 70
一班 李四 英语 80

我想转换为:

班级 姓名 语文 数学 英语
一班 张三 78 88 98
一班 李四 60 70 80


请问用linq怎么实现?




------解决方案--------------------
C# code
  
  public class Student
    {
        public string 班级 { get; set; }

        public string 姓名 { get; set; }

        public string 课程 { get; set; }

        public int 分数 { get; set; }
    }

        private void button1_Click(object sender, EventArgs e)
        {
            List<Student> mulit = new List<Student> {
                new Student{ 班级="一班", 姓名="张雷鸣", 课程="语文", 分数 =110},
                new Student{ 班级="一班", 姓名="张雷鸣", 课程="数学", 分数=220}
            };

            var tempSet = mulit.GroupBy(s => new { s.班级, s.姓名 }).Select(c => new
            {
                班级 = c.Key.班级,
                姓名 = c.Key.姓名,
                语文 = c.Where(s => s.课程.Equals("语文")).Select(s => s.分数).Single(),
                数学 = c.Where(s => s.课程.Equals("数学")).Select(s => s.分数).Single()
            
            }).ToList();
        }

------解决方案--------------------
up
------解决方案--------------------
单纯的通过一个查询估计实现不了你说的那个结果。
如果课程的科目去确定,感觉直接通过循环来获取结果也许来的更加直接和明了
C# code

  public class Student
    {
        public string 班级 { get; set; }

        public string 姓名 { get; set; }

        public string 课程 { get; set; }

        public int 分数 { get; set; }
    }

        public void Test()
        {
            List<Student> mulit = new List<Student> {
                new Student{ 班级="一班", 姓名="张三", 课程="语文", 分数 =110},
                new Student{ 班级="一班", 姓名="张三", 课程="数学", 分数=220}
            };

            var tempSet = mulit.GroupBy(s => new { s.班级, s.姓名 }).Select(c => new
            {
                班级= c.Key.班级,
                姓名 = c.Key.姓名,
                科目集合 = c.ToList()

            }).ToList();

            foreach (var t in tempSet)
            {
                //根据需要将解析的内容存放到相应的变量中
                string info = "班级:"+t.班级;
                foreach (var s in t.科目集合)
                {
                    info = s.课程 + ":" + s.分数.ToString();
                }
            }

        }