LinQ操作
2015-10-09 14:45
483 查看
一、LinQ to SQL
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();
第三步:操作
一、增:
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.SubmitChanges();
二、删:
1. 找出来
MyDBDataContext context = new MyDBDataContext();
var q =
context.Info.Where(p => p.Code == "p003");
2. 注册
if
(q.Count() > 0)
{
Info data = q.First();
//注册
context.Work.DeleteAllOnSubmit(data.Work);
context.Family.DeleteAllOnSubmit(data.Family);
context.Info.DeleteOnSubmit(data);
3. 提交
context.SubmitChanges();
三、改:
1. 找出来
MyDBDataContext context = new MyDBDataContext();
var q =
context.Info.Where(p=>p.Code == "p001");
2. 改,不用注册
if (q.Count() > 0)
{
Info data = q.First();
//改
data.Name = "胡生";
data.Nation = "n001";
data.Sex = false;
3. 提交
context.SubmitChanges();
四、查:
1.查所有
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);
}
}
2. 根据主键查询(条件查询),默认返回的都是集合。
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);
}
3. 多条件查询
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");
4. 模糊查询
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
5. Distinct查询
var q = (from p in context.Car select p.Brand).Distinct();//去重
var q =
context.Car.Select(p=>p.Brand).Distinct();//去重
6. 连接查询——对象之间的关联关系点出来的。
var q = context.Car.Where(p =>
p.Brand1.Productor.Prod_Name=="一汽丰田");
7. 去重查询出显示,IEnumerable是集合的根类型
static void Show(IEnumerable<string> q)
{
foreach (string d in q)
{
Console.WriteLine(d);
}
}
8. 统计查询
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));//价格平均值
9. 分页
//分页
MyDBDataContext context = new MyDBDataContext();
var query
= context.Car.Skip(2 * 4).Take(4);//每页4条数据,要查第三页的4条数据,跳过8条取下面4条
Show(query);
10. 排序
//排序
MyDBDataContext context = new MyDBDataContext();
//var query = context.Car.OrderBy(p=>p.Price); //升序
var query
= context.Car.OrderByDescending(p => p.Price);//降序
Show(query);
11. 集合操作
//集合操作
MyDBDataContext context = new MyDBDataContext();
var
query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name == "一汽丰田");
var
query2 = context.Car.Where(p => p.Price > 30);
//交集
var query
= query1.Intersect(query2);
//并集
//var query = query1.Union(query2);
//差集
//var query =
query1.Except(query2);
//补集
//var query =
context.Car.Except(query1);
Show(query);
二、linq to object
List<data_KeMu.KeMu> list = data.SelectAll();
data_KeMu.KeMu sj = new data_KeMu.KeMu();
//添加“请选择”
sj.KeMucode = "all";
sj.KeMuname = "请选择";
list.Insert(0,sj);插入指定位置0;
eg .list 集合的linq 操作
三、扩展属性
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();
第三步:操作
一、增:
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.SubmitChanges();
二、删:
1. 找出来
MyDBDataContext context = new MyDBDataContext();
var q =
context.Info.Where(p => p.Code == "p003");
2. 注册
if
(q.Count() > 0)
{
Info data = q.First();
//注册
context.Work.DeleteAllOnSubmit(data.Work);
context.Family.DeleteAllOnSubmit(data.Family);
context.Info.DeleteOnSubmit(data);
3. 提交
context.SubmitChanges();
三、改:
1. 找出来
MyDBDataContext context = new MyDBDataContext();
var q =
context.Info.Where(p=>p.Code == "p001");
2. 改,不用注册
if (q.Count() > 0)
{
Info data = q.First();
//改
data.Name = "胡生";
data.Nation = "n001";
data.Sex = false;
3. 提交
context.SubmitChanges();
四、查:
1.查所有
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);
}
}
2. 根据主键查询(条件查询),默认返回的都是集合。
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);
}
3. 多条件查询
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");
4. 模糊查询
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
5. Distinct查询
var q = (from p in context.Car select p.Brand).Distinct();//去重
var q =
context.Car.Select(p=>p.Brand).Distinct();//去重
6. 连接查询——对象之间的关联关系点出来的。
var q = context.Car.Where(p =>
p.Brand1.Productor.Prod_Name=="一汽丰田");
7. 去重查询出显示,IEnumerable是集合的根类型
static void Show(IEnumerable<string> q)
{
foreach (string d in q)
{
Console.WriteLine(d);
}
}
8. 统计查询
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));//价格平均值
9. 分页
//分页
MyDBDataContext context = new MyDBDataContext();
var query
= context.Car.Skip(2 * 4).Take(4);//每页4条数据,要查第三页的4条数据,跳过8条取下面4条
Show(query);
10. 排序
//排序
MyDBDataContext context = new MyDBDataContext();
//var query = context.Car.OrderBy(p=>p.Price); //升序
var query
= context.Car.OrderByDescending(p => p.Price);//降序
Show(query);
11. 集合操作
//集合操作
MyDBDataContext context = new MyDBDataContext();
var
query1 = context.Car.Where(p => p.Brand1.Productor.Prod_Name == "一汽丰田");
var
query2 = context.Car.Where(p => p.Price > 30);
//交集
var query
= query1.Intersect(query2);
//并集
//var query = query1.Union(query2);
//差集
//var query =
query1.Except(query2);
//补集
//var query =
context.Car.Except(query1);
Show(query);
二、linq to object
List<data_KeMu.KeMu> list = data.SelectAll();
data_KeMu.KeMu sj = new data_KeMu.KeMu();
//添加“请选择”
sj.KeMucode = "all";
sj.KeMuname = "请选择";
list.Insert(0,sj);插入指定位置0;
eg .list 集合的linq 操作
//搜索按钮 private void btn_Search_Click(object sender, EventArgs e) { //定义的初始的list数据 List<data__ShiTi.ShiTi> list = new List<data__ShiTi.ShiTi>(); //List<data__ShiTi.ShiTi> list1 = new List<data__ShiTi.ShiTi>(); data__ShiTi.ShiTiDA da = new data__ShiTi.ShiTiDA(); list = da.SelectAll(); if (coBox_kemu.Text != "请选择") { //List<data__ShiTi.ShiTi> li = da.Select_kemu(coBox_kemu.SelectedValue.ToString()); //list = list.Intersect(li,new ).ToList(); string s = coBox_kemu.SelectedValue.ToString(); //判断list集合中p.KeMucode的相同的部分 list = list.Where(p => p.KeMucode == s).ToList(); } if (coBox_nanyi.Text != "请选择") { //List<data__ShiTi.ShiTi> li = da.Select_nanyi(coBox_nanyi.SelectedValue.ToString()); string s = coBox_nanyi.SelectedValue.ToString(); list = list.Where(a => a.Easycode == s).ToList(); } if (coBox_tixing.Text != "请选择") { //List<data__ShiTi.ShiTi> li = da.Select_tixing(coBox_tixing.SelectedValue.ToString()); //list.Intersect(li).ToList(); string s = coBox_tixing.SelectedValue.ToString(); list = list.Where(a => a.TiMucode == s).ToList(); } if (tBox_key.Text.ToString() != "") { //string s = da.select_tmcontent(tBox_key.Text); //list = list.Where(c => c.TiMucontent == s).ToList(); //利用lambda表达式中的p.TiMucontents.Contains();函数来求是否包含 string s=tBox_key.Text; list = list.Where(p => p.TiMucontent.Contains(s)).ToList(); } dataGridView_disp1.DataSource = list; }
三、扩展属性
//扩展属性 科目名称 private string keMuname; public string KeMuname { get { ShiTiDA da = new ShiTiDA(); return da.KeMuName(keMucode);//KeMuName(string s);属于自定函数方法 } set { keMuname = value; } } //扩展难易度 名称 private string codename; public string Codename { get { ShiTiDA da = new ShiTiDA(); return da.EasyName(easycode); } set { codename = value; } } //扩展题目类型 private string tiMuname; public string TiMuname { get { ShiTiDA da = new ShiTiDA(); return da.TypeName(tiMucode); } set { tiMuname = value; } }
相关文章推荐
- 智能硬件+App移动新生态【11.01深圳】
- smarty 自定义函数
- 更新Cocos2D支持Xcode 7
- 如何查看真机的沙盒(图文教程)
- 更新Cocos2D支持Xcode 7
- 更新Cocos2D支持Xcode 7
- MATLAB中如何输出漂亮的公式
- JQuery EasyUI DataGrid 纵向(转置)表格插件 TransposedView
- NGINX开篇
- General Problem Solving Techniques [Intermediate-1]~D - Fabled Rooks
- oracle 第02章 基本操作
- quick-cocos2d-x数据存储 UserDefault GameState io
- 系统设计之BS与CS结构分析
- PHP+table生成柱状图
- 欢迎使用CSDN-markdown编辑器
- 一个最符合中国国情的工作流设计参考(包括PHP实现)
- 自定义字节流缓冲区,演示缓冲区的工作原理
- OBS (open boardcast server)结构分析
- Redis初级介绍
- Loadrunner:安装LR11时提示缺少vc2005_sp1_with_atl_fix_redist