您的位置:首页 > 其它

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 操作

//搜索按钮
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; }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: