c#中的linq二
2016-07-07 14:07
549 查看
c#中的linq二
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinqInfo { public class Stu { public int ID { set; get; } public string Name { get; set; } public string Tel { get; set; } public string Address { get; set; } } public class GradeInfo { public int StuID {get;set; } public string Course{get;set;} public int grade{get;set;} } class Program { static void Main(string[] args) { List<Stu> list = new List<Stu>() { new Stu{ID=1,Name="jack1",Tel="110",Address="ChengDu"}, new Stu{ID=2,Name="jack2",Tel="112",Address="ChengDu"}, new Stu{ID=3,Name="jack3",Tel="113",Address="ChengDu"}, new Stu{ID=4,Name="jack4",Tel="114",Address="ChengDu"}, new Stu{ID=5,Name="jack5",Tel="115",Address="ChengDu"} }; //where 关键字 var query = from li in list where li.Name == "jack1" select li; //order by关键字的 //ascending 升序 //descending 降序 var query1 = from s in list orderby s.ID ascending select s; //group by的使用 var query2 = from s in list group s by s.Address into g select g; //group by 求最大值 var max = from s in list group s by s.Address into g select new { g.Key, //分组字段 MaxId=g.Max(p=>p.ID) //最大的ID }; //group by 求最小值 var min = from s in list group s by s.Address into g select new { g.Key, MidId=g.Min(p=>p.ID) }; //group by 平均值 var avg = from s in list group s by s.Address into g select new { g.Key, avgInfo = g.Average(p => p.ID) }; //group by 求和 var sum = from s in list group s by s.Address into g select new { g.Key, Sum=g.Sum(p=>p.ID) }; //这些就是group by 的基本使用滴呀; //接下来就是各种连接滴呀; List<GradeInfo> gradeList = new List<GradeInfo>() { new GradeInfo(){StuID=1,Course="语文",grade=100}, new GradeInfo(){StuID=1,Course="英语",grade=99}, new GradeInfo(){StuID=1,Course="数学",grade=88}, new GradeInfo(){StuID=2,Course="语文",grade=66}, new GradeInfo(){StuID=2,Course="英语",grade=90}, new GradeInfo(){StuID=2,Course="数学",grade=67}, //模拟错误数据 new GradeInfo(){StuID=110,Course="wrong",grade=120} }; //然后再来我们的各种连接查询滴呀; var innerJoin = from s in list join g in gradeList on s.ID equals g.StuID select new { Name=s.Name, Grade=g.grade }; //左连接; var leftJoin = from s in list join g in gradeList on s.ID equals g.StuID into joinData from g in joinData.DefaultIfEmpty() select new { Name=s.Name, Grade= g!=null ? g.grade:0 //返回相同的数据类型; }; //整体来说,再数据赛选上的效果是挺不错滴呀; //右连接; 其实左连接 和右 连接是一个相对的概念; var rightJoin = from g in gradeList join s in list on g.StuID equals s.ID into joinData from s in joinData.DefaultIfEmpty() select new { Grade=g.grade, Name=s!=null?s.Name:"" }; var result = rightJoin; //最后在附带一中linq分页的方法; var val = (from u in list orderby u.ID ascending select u).Skip(2).Take(2); //每页两条,第二页 /* * * var q=query.take(n) 这样只能取出前条n记录, * 但是还是让我们看到了分页的曙光,还是还有个skip吗, * skip可以取出除去满足条件的剩下的记录。 * 如果我们要把数据以每页pagesize的数量来进行分页, * 很简单,很skip(pagersize*pagenum)然后在剩下的记录中take(pagesize)不就得到了想要的数据了么。 * * */ var xx = val; Console.WriteLine("over"); Console.ReadLine(); } } }
相关文章推荐
- 浅谈C#抽象方法、虚方法、接口
- C# 遍历文件
- C#代码安装、卸载、监控Windows服务
- C#基础语言知识--Framework类库
- C# 6.0的字典(Dictionary)的语法
- C# 浏览文件夹地址
- 在.net中调用别人写的接口获得数据
- C#使用SSDB管理增量日志并提供查询
- C# datatable取某几列值
- C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)
- C#简单实现显示中文格式星期几的方法
- C#使用系统方法发送异步邮件完整实例
- c#中的delegate(委托)和event(事件)了
- 由浅到深讲解C#-LINQ
- C# 6.0的属性(Property)的语法与初始值详解
- C# 读取xls格式的文件
- C#实现的AES加密解密完整实例
- C# 对List<T>取交集、连集及差集
- C# Access 里如何判断字符串里是不是包含数字
- .NET引用类型与值类型