LINQ查询表达式---------select子句
1.1常见的select子句查询
class Program { public class PerInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public List<int> Scores { get; set; } } List<PerInfo> PerInfos = new List<PerInfo>() { new PerInfo { Id = 1, Name = "小白", Age = 15, Scores = new List<int>() { 78, 88, 95, 60 } }, new PerInfo { Id = 2, Name = "小日", Age = 18, Scores = new List<int>() { 98, 86, 79, 99 } }, new PerInfo { Id = 3, Name = "小月", Age = 21, Scores = new List<int>() { 95, 95, 96, 97 } }, new PerInfo { Id = 4, Name = "小明", Age = 19, Scores = new List<int>() { 96, 97, 98, 99 } } }; static void Main(string[] args) { Program p = new Program(); var query = from q in p.PerInfos select q; foreach (PerInfo per in query) { Console.WriteLine("姓名:{0},年龄:{1}", per.Name, per.Age); } Console.ReadLine(); } }
输出结果: 姓名:小白,年龄:15 姓名:小日,年龄:18 姓名:小月,年龄:21 姓名:小明,年龄:19
1.2 其他形式的select查询
class Program { public class PerInfo { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public List<int> Scores { get; set; } public CustrInfo GetCustrInfo(List<CustrInfo> p, int id) { CustrInfo cInfo = (from q in p where q.Id == id select q).FirstOrDefault(); return cInfo; } public override string ToString() { return "姓名:" + Name + " 年龄:" + Age; } } public class CustrInfo { public int Id { get; set; } public string Tel { get; set; } public string Email { get; set; } public override string ToString() { return "邮箱:" + Email + "电话:" + Tel; } } public class ScoreInfo { public double Average { get; set; } public int ID { get; set; } } static void Main(string[] args) { List<PerInfo> perInfos = new List<PerInfo>() { new PerInfo { Id = 1, Name = "小白", Age = 15, Scores = new List<int>() { 78, 88, 95, 60 } }, new PerInfo { Id = 2, Name = "小日", Age = 18, Scores = new List<int>() { 98, 86, 79, 99 } }, new PerInfo { Id = 3, Name = "小月", Age = 21, Scores = new List<int>() { 95, 95, 96, 97 } }, new PerInfo { Id = 4, Name = "小明", Age = 19, Scores = new List<int>() { 96, 97, 98, 99 } } }; List<CustrInfo> custrInfos = new List<CustrInfo>() { new CustrInfo {Id = 1, Tel = "110", Email = "Xuahau@123.Com"}, new CustrInfo {Id = 2, Tel = "120", Email = "xchads@qq.Com"}, new CustrInfo {Id = 3, Tel = "119", Email = "kashda@q56.Com"}, new CustrInfo {Id = 4, Tel = "999", Email = "sadhkuu@143.Com"} }; Program p = new Program(); //1 根据查询条件查询数据源 var query1 = from q in perInfos where q.Id > 1 select q; Console.WriteLine("Query1:"); foreach (PerInfo per in query1) { Console.WriteLine(per.ToString()); } //2 查询单个属性 var query2 = from q in perInfos where q.Id > 1 select q.Name; Console.WriteLine(" Query2:"); foreach (string s in query2) { Console.WriteLine(s); } //3 查询一个经过筛选的对象 var query3 = from q in perInfos where q.Id > 1 select q.GetCustrInfo(custrInfos, q.Id); Console.WriteLine(" Query3:"); foreach (CustrInfo c in query3) { Console.WriteLine(c.ToString()); } //4 查询内部数组 var query4 = from q in perInfos where q.Id > 1 select q.Scores[0]; Console.WriteLine(" Query4:"); foreach (int i in query4) { Console.WriteLine(i); } //5 表达式 var query5 = from q in perInfos where q.Id > 1 select q.Scores[0] * 1.1; Console.WriteLine(" Query5:"); foreach (int i in query5) { Console.WriteLine(i); } //6 求平均数 var query6 = from q in perInfos where q.Id > 1 select q.Scores.Average(); Console.WriteLine(" Query6:"); foreach (int i in query6) { Console.WriteLine(i); } //7 查询多个属性 var query7 = from q in perInfos where q.Id > 1 select new { q.Name, q.Age }; Console.WriteLine(" Query7:"); foreach (var item in query7) { Console.WriteLine(item.Name + " " + item.Age); } //8 对查询结果进行投影 var query8 = from q in perInfos where q.Id > 1 select new ScoreInfo { ID = q.Id, Average = q.Scores.Average() }; Console.WriteLine(" Query8:"); foreach (var item in query8) { Console.WriteLine("{0},{1}", item.ID, item.Average); } //9 查询平均分大于85的联系人信息 var query9 = from q in perInfos where q.Scores.Average() > 85 join ci in custrInfos on q.Id equals ci.Id select ci; Console.WriteLine(" Query9:"); foreach (var item in query9) { Console.WriteLine("{0} {1} {2}", item.Id, item.Email, item.Tel); } Console.ReadLine(); } }
输出结果: Query1: 姓名:小日 年龄:18 姓名:小月 年龄:21 姓名:小明 年龄:19 Query2: 小日 小月 小明 Query3: 邮箱:xchads@qq.Com电话:120 邮箱:kashda@q56.Com电话:119 邮箱:sadhkuu@143.Com电话:999 Query4: 98 95 96 Query5: 107 104 105 Query6: 90 95 97 Query7: 小日 18 小月 21 小明 19 Query8: 2,90.5 3,95.75 4,97.5 Query9: 2 xchads@qq.Com 120 3 kashda@q56.Com 119 4 sadhkuu@143.Com 999