0
点赞
收藏
分享

微信扫一扫

C# Linq复杂一点的查询


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 条评论