C# Linq复杂一点的查询

来源:互联网 发布:意大利火车时刻表软件 编辑:程序博客网 时间:2024/06/08 11:06
using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApplication22{    class Program    {        public Student[] students { get; set; }        public SC[] scs { get; set; }        public Course[] courses { get; set; }        public Program()        {            students = new Student[]            {                new Student { sid = "cxc", age = 18, sex = true, birth = DateTime.Now },                new Student { sid = "qwe", age = 19, sex = false, birth = DateTime.Now },                new Student { sid = "zxc", age = 17, sex = false, birth = DateTime.Now },                new Student { sid = "asd", age = 16, sex = true, birth = DateTime.Now }            };            scs = new SC[]            {                new SC {sid = "cxc",cid="A",score =83 },                new SC {sid = "cxc",cid="B",score =94 },                new SC {sid = "cxc",cid="C",score =87 },                new SC {sid = "qwe",cid="A",score =65 },                new SC {sid = "qwe",cid="B",score = 76 },                new SC {sid = "asd",cid="A",score =74 },                new SC {sid = "asd",cid="B",score =87 },                new SC {sid = "zxc",cid="A",score =90 },                new SC {sid = "zxc",cid="B",score =81 }            };            courses = new Course[]            {                new Course {cid = "A" ,description = "这是A课程"},                new Course {cid = "B" ,description = "这是B课程"}            };        }        static void Main(string[] args)        {            Program p = new Program();            var result = p.students.Where(s => s.age > 17).OrderByDescending(s=>s.age);            foreach(Student s in result)            {                Console.WriteLine("sid:{0} age:{1} sex:{2} birth:{3}",s.sid,s.age,s.sex,s.birth);            }            Console.WriteLine("======================我是华丽分割线======================");            var result1 = p.scs.Count();            Console.WriteLine(result1);            Console.WriteLine("======================我是华丽分割线======================");            var result2 = p.scs.Distinct(new SCCompare());//Distinct的使用            foreach(var s in result2)            {                Console.WriteLine("sid:{0} cid:{1} score:{2}", s.sid, s.cid, s.score);            }            Console.WriteLine("======================我是华丽分割线======================");            var result3 = p.scs.Max(s => s.score);//94            Console.WriteLine(result3);            Console.WriteLine("======================我是华丽分割线======================");            var result4 = p.scs.GroupBy(s => s.sid).Select(g=>(new { sid=g.Key,score=g.Sum(s=>s.score)}));            foreach (var s in result4)            {                Console.WriteLine(s.sid+":"+s.score);            }            Console.WriteLine("======================我是华丽分割线======================");            var result5 = from s in p.students                          join ss in p.scs                          on s.sid equals ss.sid                          select new { sid = s.sid, age = s.age, cid = ss.cid, score = ss.score };            foreach (var s in result5)            {                Console.WriteLine(s.sid + ":" + s.age + ":" +s.cid + ":" +s.score);            }            Console.WriteLine("======================我是华丽分割线======================");            var result6 = from rr in (from r in result5                          group r by r.sid into g         //注意这个 into ,在查询的过程中划分出新结果                          select new { sid = g.Key, score = g.Sum(sum => sum.score) })                          where rr.score>170                          select rr;            foreach (var s in result6)            {                Console.WriteLine(s.sid + ":" + s.score);            }            Console.WriteLine("======================我是华丽分割线======================");            List<T1> tt1 = new List<T1>            {                new T1 {ID = 1,MAC = "111111" },                new T1 {ID = 2,MAC = "222222" },                new T1 {ID = 4,MAC = "333333" },            };            List<T2> tt2 = new List<T2>            {                new T2 {ID = 1,PV = 51,UV = 72 },                new T2 {ID = 2,PV = 48,UV = 92 },                new T2 {ID = 4,PV = 57,UV = 62 },                new T2 {ID = 1,PV = 38,UV = 85 },                new T2 {ID = 2,PV = 46,UV = 180 },                new T2 {ID = 4,PV = 87,UV = 69 }            };            var result7 = from t1 in tt1                          join t2 in tt2                          on t1.ID equals t2.ID                          select new { ID = t1.ID, MAC = t1.MAC, PV = t2.PV, UV = t2.UV };            result7 = from t in result7                      group t by new { t.ID, t.MAC } into tt                      select new { ID = tt.Key.ID,MAC=tt.Key.MAC,PV = tt.Sum(s=>s.PV), UV = tt.Sum(s => s.UV) };            Console.WriteLine("ID:MAC:PV:UV");            foreach (var s in result7)            {                Console.WriteLine(s.ID + ":" + s.MAC + ":" + s.PV + ":" + s.UV);            }            Console.WriteLine("======================我是华丽分割线======================");            var result8 = from s in p.scs                          join c in p.courses                          on s.cid equals c.cid into left                          from l in left.DefaultIfEmpty()                          select new { sid = s.sid, cid = s.cid, score = s.score, description = l==null?"空":l.description };            foreach (var s in result8)            {                Console.WriteLine(s.sid + ":" + s.cid+ ":" + s.score + ":" + s.description);            }            Console.WriteLine("======================我是华丽分割线======================");            var result9 = (from t in tt1                           where !(from t1 in tt1                                   select t1.ID).Take(2).Contains(t.ID)                           select t).Take(1);            foreach (var s in result9)  //查询第3条            {                Console.WriteLine(s.ID + ":" + s.MAC);            }            Console.WriteLine("======================我是华丽分割线======================");        }    }    class Student    {        public string sid { get; set; }        public int age { get; set; }        public bool sex { get; set; }        public DateTime birth { get; set; }        public virtual ICollection<SC> scs { get; set; }    }    class SC    {        public string sid { get; set; }        public string cid { get; set; }        public int score { get; set; }        public virtual ICollection<Student> students { get; set; }        public virtual ICollection<Course> courses { get; set; }    }    class Course    {        public string cid { get; set; }        public string description { get; set; }        public virtual ICollection<SC> scs { get; set; }    }    class SCCompare:IEqualityComparer<SC>    {        public bool Equals(SC s1, SC s2)        {            return s1.cid.Equals(s2.cid)&&s1.sid.Equals(s2.sid)&&s1.score.Equals(s2.score);        }        public int GetHashCode(SC s)        {            return base.GetHashCode();        }    }    class T1    {        public int ID { get; set; }        public string MAC { get; set; }    }    class T2    {        public int ID { get; set; }        public int PV { get; set; }        public int UV { get; set; }    }}

0 0
原创粉丝点击