项目8-AspNetMvc_linq技术


利用linq技术完成数据的Pivot处理

核心代码:

using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqPivot3{
    class Program    {
        class Rec
        {
            public string Name { get; set; }
            public string CouName { get; set; }
            public decimal CouScore { get; set; }
            public int CouRank { get; set; }
        }
        static void Main(string[] args)
        {
            List recs = new List{
                        new Rec {Name="Tom", CouName="Math",CouScore=100m,CouRank=3},
                        new Rec {Name="Tom", CouName="Chinese",CouScore=20m,CouRank=4},
                        new Rec {Name="Alice", CouName="Math",CouScore=98.45m,CouRank=1},
                        new Rec {Name="Alice", CouName="Chinese",CouScore=56.34m,CouRank=3},
                        new Rec {Name="Mark", CouName="Chinese",CouScore=45.45m,CouRank=4},
                        new Rec {Name="Mark", CouName="Math",CouScore=98.45m,CouRank=1},

            };
            var queryX = from foo in recs
                         group foo by foo.Name into g
                         select new
                         {
                             Name = g.Key,
                             Math = g.Where(x => x.CouName == "Math").Sum(x => x.CouScore),
                             Chinese = g.Where(x => x.CouName == "Chinese").Sum(x => x.CouScore),
                             Avg = g.Average(x => x.CouScore)
                         };        

            Console.WriteLine("Name-Math-Chinese-Average");
           
            foreach (var item in queryX)
            {
                Console.WriteLine(item.Name + " - " + item.Math + "-" + item.Chinese + "-" + item.Avg);
            }
            var queryY = from foo in recs
                         group foo by foo.Name into g
                         select new
                         {
                             Name = g.Key,
                             MathRank = g.Where(x => x.CouName == "Math").Sum(x => x.CouRank),
                             ChineseRank = g.Where(x => x.CouName == "Chinese").Sum(x => x.CouRank)
                         };
            Console.WriteLine("\n\nName-MathRank-ChineseRank"); 
            foreach (var item in queryY)
            {
                Console.WriteLine(item.Name + " - " + item.MathRank + "-" + item.ChineseRank);
            }
            var queryZ = from x in queryX
                         join y in queryY
                         on x.Name equals y.Name
                         select new
                         {
                             Name = x.Name,
                             Math = x.Math,
                             MathRank = y.MathRank,
                             Chinese = x.Chinese,
                             ChineseRank = y.ChineseRank,
                             Avg = x.Avg,
                         };

            Console.WriteLine("\n\nName-Math-MathRank-Chinese-ChineseRank-Averge");

            foreach (var item in queryZ)
            {
                Console.WriteLine(item.Name + " - " + item.Math + "-" + item.MathRank + "-" + item.Chinese + "-" + item.ChineseRank + "-" + item.Avg);
            }
            var query = from foo in recs
                        group foo by foo.CouName into g
                        select new
                        {
                            CouName = g.Key,
                            Tom = g.Where(x => x.Name == "Tom").Sum(x => x.CouScore),
                            Alice = g.Where(x => x.Name == "Alice").Sum(x => x.CouScore),
                            Mark = g.Where(x => x.Name == "Mark").Sum(x => x.CouScore),
                            Avg = g.Average(x => x.CouScore)
                        };  

            Console.WriteLine("\n\nCouName-Tom-Alice-Mark-Average");
            foreach (var item in query)
            {
                Console.WriteLine(item.CouName + " - " + item.Tom + "-" + item.Alice + "-" + item.Mark + "-" + item.Avg);
            }

            Console.Read();
        }
    }
}