LinQ是指集成化查询语言,通过映射将数据库内的表名变为C#的类名,将列名作为属性名,将表的关系作为类的成员对象。O--M--R
O-Object对象
R-Relation关系
M-Mapping映射
LinQ包括:LinQ to SQL,针对SQL的查询,它是一个带有可视化的操作界面的ORM工具。
LinQ to Object,用来实现对内存中集合对象的查询。
LinQ to DataSet,对强类型化或弱类型化的DataSet或独立的DataTable进行查询。
LinQ to Entity,对实体框架中EDM定义的实体集合进行查询。
(一):LinQ to SQL
第一步:建立LinQ2SQL类
添加一个新建项,选择LinQ to SQL,将用到的表拖进来。
第二步:实例化上下文对象,基本所有操作都是通过上下文对象来进行的。
MyDBDataContext context = new MyDBDataContext();
第三步:操作
一、增:
.造对象。
Info data = new Info();
data.Code = "p211";
data.Name = "石头";
data.Sex = false;
data.Nation = "N001";
data.Birthday = new DateTime(, , );
.在上下文中注册上面新造的对象。
context.Info.InsertOnSubmit(data);
.提交
context.SubmitChanges();
二、删:(由于主、外键关系,需要先删外键,才能删除)
. 找出来
MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p => p.Code == "p003");
. 注册 if (q.Count() > )
{
Info data = q.First();
//注册
context.Work.DeleteAllOnSubmit(data.Work);//删除整个work表
context.Family.DeleteAllOnSubmit(data.Family);//删除fanmily整个表
context.Info.DeleteOnSubmit(data);//最后删除要删除的主键表
. 提交
context.SubmitChanges();
}
三、改:
. 找出来
MyDBDataContext context = new MyDBDataContext();
var q = context.Info.Where(p=>p.Code == "p001");
. 改,不用注册 if (q.Count() > )
{
Info data = q.First();
//改
data.Name = "胡生";
data.Nation = "n001";
data.Sex = false; . 提交
context.SubmitChanges();
}
四、查:
.查所有 MyDBDataContext context = new MyDBDataContext();
//所有人员
var q = context.Info;
//var q = from p in context.Info select p;
//显示
foreach(Info data in q)
{
//data.Nation1:当前人员对应的民族对象。
Console.WriteLine(data.Name+"\t"+data.Nation1.Name);
//data.Work:当前人员对应的工作记录集合
foreach (Work work in data.Work)
{
Console.WriteLine("\t"+work.Firm+"\t"+work.Depart);
}
} . 根据主键查询(条件查询),默认返回的都是集合。
var q = from p in context.Info where p.Code == "p211" select p;
var q = context.Info.Where(p => p.Code == "p211").Where(p => p.Nation1.Name == "汉族"); //Lambda表达式(最最简化的函数,只有参数和函数体的匿名函数)
var q = context.Info.Where(p => p.Code == "p211" && p.Nation1.Name=="汉族");
var q = context.Info.Where(p => p.Code == "p211"); //默认返回的是集合
if (q.Count() > ) //看看集合中是否查出数据来了
{
Info data = q.First(); //取第一个对象出来
Console.WriteLine(data.Nation1.Name + data.Name);
}
. 多条件查询
var q = from p in context.Car where p.Price > && p.Brand=="b002" select p;
var q = context.Car.Where(p => p.Price > && p.Brand == "b002");
var q = context.Car.Where(p => p.Price > ).Where(p => p.Brand == "b002"); var q = from p in context.Car where p.Price > || p.Brand == "b002" select p;
var q = context.Car.Where(p => p.Price > || p.Brand == "b002");
. 模糊查询 var q = from p in context.Car where p.Name.Contains("") select p; //包含
var q = from p in context.Car where p.Name.StartsWith("奥迪") select p;//开头
var q = from p in context.Car where p.Name.EndsWith("奥迪") select p;//结尾
var q = context.Car.Where(p => p.Name.Contains(""));//包含
var q = context.Car.Where(p => p.Name.StartsWith("奥迪"));//开头
var q = context.Car.Where(p => p.Name.EndsWith("型"));//结尾
var q = from p in context.Car where p.Name.Substring(, ) == "" select p;//第三个字符
var q = context.Car.Where(p => p.Name.Substring(,) == "");//第三个字符是5 . Distinct查询
var q = (from p in context.Car select p.Brand).Distinct();//去重
var q = context.Car.Select(p=>p.Brand).Distinct();//去重
. 连接查询——对象之间的关联关系点出来的。
var q = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽丰田");
. 去重查询出显示,IEnumerable是集合的根类型 static void Show(IEnumerable<string> q)
{
foreach (string d in q)
{
Console.WriteLine(d);
}
} . 统计查询 MyDBDataContext context = new MyDBDataContext();
//var query = from p in context.Car select p;
var query = context.Car;//查出所有
Console.WriteLine(query.Count());//统计个数
Console.WriteLine(query.Max(p => p.Price));//价格的最大值
Console.WriteLine(query.Min(p => p.Price));//价格的最小值
Console.WriteLine(query.Max(p => p.Price * p.Oil));//价格乘以油耗的最大值
Console.WriteLine(query.Sum(p => p.Price));//价格求和
Console.WriteLine(query.Sum(p => p.Price * p.Oil));//价格乘以油耗之后求和
Console.WriteLine(query.Average(p => p.Price));//价格平均值 . 分页
//分页
MyDBDataContext context = new MyDBDataContext();
var query = context.Car.Skip( * ).Take();//每页4条数据,要查第三页的4条数据,跳过8条取下面4条
Show(query);
. 排序
//排序
MyDBDataContext context = new MyDBDataContext();
//var query = context.Car.OrderBy(p=>p.Price); //升序
var query = context.Car.OrderByDescending(p => p.Price);//降序
Show(query);
. 集合操作 //集合操作
MyDBDataContext context = new MyDBDataContext();
var query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name == "一汽丰田");
var query2 = context.Car.Where(p => p.Price > ); //交集
var query = query1.Intersect(query2);
//并集
//var query = query1.Union(query2);
//差集
//var query = query1.Except(query2);
//补集
//var query = context.Car.Except(query1);
Show(query);

最新文章

  1. Python&gt;&gt;&gt;使用Python和Pygame创建画板
  2. 新华龙电子推出最新网络开发板(W5100&amp;W5500方案)
  3. .Net语言 APP开发平台——Smobiler学习日志:仿12306的APP登陆界面
  4. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
  5. Android 实现ListView中Item被单击后背景色保持高亮
  6. jquery时间倒计时
  7. hung_task_timeout_secs 和 blocked for more than 120 seconds
  8. java web -部署在linux
  9. Silverlight学习(三)
  10. Java SVN管理工具的使用
  11. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
  12. 【一天一道LeetCode】#202. Happy Number
  13. Linux下部署开源版“禅道”项目管理系统
  14. python 用lambda表达式代替简单的函数, 匿名函数
  15. struct和[]byte的转换,注意结构体内变量首字母一定大写
  16. 微信小程序填坑之旅一(接入)
  17. Ubuntu16.04安装Mininet
  18. mysql 执行多线程临时方案
  19. Solidity 官方文档中文版 4_Solidity 编程实例
  20. arch初认识

热门文章

  1. java 数组插入元素
  2. Android 优化性能之 如何避免--过度绘制
  3. C++读写EXCEL文件OLE,java读写excel文件POI 对比
  4. DrawerLayout、CoordinatorLayout、CollapsingToolbarLayout的使用--AndroidSupportDesign练手
  5. C# 保留小数点后两位(方法总结)
  6. C/C++指针的指针(**p)和指针的引用(*&amp;amp;)使用案例分析
  7. [翻译]Go语言调度器
  8. POJ 3784.Running Median
  9. BestCoder Round #47
  10. BZOJ 2442: [Usaco2011 Open]修剪草坪( dp )