20141129 LinQ to SQL


ORM
O-Object对象
R-Relation关系
M-Mapping映射
对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

O -- M -- R

表名-类名
列名-属性名
表的关系-类的成员对象

LinQ 集成化查询语言 SQL-结构化查询语言
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
LinQ包括:LinQ to SQL,LinQ to Object,LinQ to DataSet,LinQ to Entity

LinQ to SQL
第一步:建立LinQ2SQL类


第二步:实例化上下文对象。

MyDBDataContext context = new MyDBDataContext();
第三步:操作

一、增:
1.造对象。
Info data = new Info();
data.Code = "p211";
data.Name = "周青";
data.Sex = false;
data.Nation = "N001";
data.Birthday = new DateTime(1990, 1, 2);

2.在上下文中注册上面新造的对象。
context.Info.InsertOnSubmit(data);

3.提交
context.SubmitChange();

二、删:
MyDBDataContext context = new MyDBDataContext();
//1.找
var q = context.Info.Where(p => p.Code == "p003");

if (q.Count() > 0)
{
Info data = q.First();
//2.注册
context.Work.DeleteAllOnSubmit(data.Work);
context.Family.DeleteAllOnSubmit(data.Family);
context.Info.DeleteOnSubmit(data);
//3.提交
context.SubmitChanges();
}
三、改:
1.找
2.改
3.提交
四、查:
查询所有
MyDBDataContext context = new MyDBDataContext();
//所有人员
var q = context.Info;
//显示
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() > 0) //看看集合中是否查出数据来了
{
Info data = q.First(); //取第一个对象出来
Console.WriteLine(data.Nation1.Name + data.Name);
}

查询所有
var q = from p in context.Info select p;
var q = context.Info;

但条件查询
var q = from p in context.Info where p.Code=="p003" select p;
var q = context.Info.Where(p => p.Code=="p003");

多条件查询
var q = from p in context.Car where p.Price > 30 && p.Brand=="b002" select p;
var q = context.Car.Where(p => p.Price > 30 && p.Brand == "b002");
var q = context.Car.Where(p => p.Price > 30).Where(p => p.Brand == "b002");

var q = from p in context.Car where p.Price > 30 || p.Brand == "b002" select p;
var q = context.Car.Where(p => p.Price > 30 || p.Brand == "b002");

模糊查询:
var q = from p in context.Car where p.Name.Contains("5") 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("5"));//包含
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(2, 1) == "5" select p;//第三个字符
var q = context.Car.Where(p => p.Name.Substring(2,1) == "5");//第三个字符是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=="一汽丰田");

 1             //统计函数
 2             MyDBDataContext context = new MyDBDataContext();
 3             var query = from p in context.Car select p;
 4             //var query = context.Car;
 5             Console.WriteLine(query.Count());
 6             Console.WriteLine(query.Max(p => p.Price));
 7             Console.WriteLine(query.Min(p => p.Price));
 8             Console.WriteLine(query.Max(p => p.Price * p.Oil));//可以以积的形式表示
 9             Console.WriteLine(query.Sum(p => p.Price));
10             Console.WriteLine(query.Sum(p => p.Price * p.Oil));
11             Console.WriteLine(query.Average(p => p.Price));
统计函数
 1         public static void Main(string[] args)
 2         {
 3             //分页
 4             MyDBDataContext context = new MyDBDataContext();
 5             var query = context.Car.Skip(2 * 4).Take(4);
 6             Show(query);
 7 
 8             //排序
 9             //MyDBDataContext context = new MyDBDataContext();
10             ////var query = context.Car.OrderBy(p=>p.Price); //升序
11             //var query = context.Car.OrderByDescending(p => p.Price);//降序
12             //Show(query);
13 
14             //集合操作
15             //MyDBDataContext context = new MyDBDataContext();
16             //var query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name=="一汽丰田");
17             //var query2 = context.Car.Where(p => p.Price > 30);
18 
19             ////交集
20             //var query = query1.Intersect(query2);
21             ////并集
22             ////var query = query1.Union(query2);
23             ////差集
24             ////var query = query1.Except(query2);
25             ////补集
26             ////var query = context.Car.Except(query1);
27 
28             //Show(query);
29         }
30 
31         static void Show(IEnumerable cars)
32         {
33             foreach (Car data in cars)
34             {
35                 Console.WriteLine(data.Name + "\t"+data.Brand1.Productor.Prod_Name+"\t" + data.Price);
36             }
37         }
排序/集合操作/分页

相关