项目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) { Listrecs = 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(); } } }