`

LINQ技术

阅读更多

 

继续学习LINQ to SQL操作SQL Server数据库

通过前面学习LINQ查询表达式(链接1)LINQ查询操作(链接2)LINQ to SQL相关的类型(链接3)DataContext(链接4),我们已经可以自如的使用LINQ to SQL操作SQL Server数据库了:

1.简单查询(略)

2.复杂查询(参考链接1)

  protected void Button1_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            var result = from comm in db.ComManager

     查询公司管理员表里的管理员名及其管理的公司名   这里的equals是关键字而非方法Equals()   按管理员ID降序排列

                         join com in db.Company on comm.ComManagerID equals com.ComManagerID orderby comm.ComManagerID descending

            经实验匿名类型的属性名绑定到GridView里就是显示的表格的标头名

                         select new {  Manager= comm.Name, Company = com.CompanyName };

            GridView1.DataSource = result;

            GridView1.DataBind();

        }

3.聚合查询(参考链接2)

  protected void Button2_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            在招聘表里查询桂林山水生态的最高薪水和平均薪水

            此处u.Company实质上与链接3的EntityRef<T>类型有关(多条招聘记录对应一个公司)

   var result1 = db.Employ.Where<Employ>(u => u.Company.CompanyName.Equals("桂林山水生态"));

            var Maxsalary1 = result1.Max<Employ>(u => u.Salary);

            var Aversalary1 = result1.Average<Employ>(u => u.Salary);

            Response.Write(Maxsalary1 + "<br/>");

            Response.Write(Aversalary1);

--------------------------------用了查询表达式和查询操作两种不同的方法,结果相同------------------------------------------

            var result2 = from u in db.Employ

             此处u.Company实质上与链接3的EntityRef<T>类型有关(多条招聘记录对应一个公司)

                          where u.Company.CompanyName.Equals("桂林山水生态")

                          select u.Salary;

            var Maxsalary2 = result2.Max();

            var Aversalary2 = result2.Average();

            Response.Write(Maxsalary2 + "<br/>");

            Response.Write(Aversalary2);

        }

 

4.分组查询(对链接1里的group by into的补充)

  protected void Button3_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            var result = from u in db.ComManager

查询公司管理员表,并将查询结果按管理员ID大于4的分为一组,其余的为一组,每一组就是一个集合,集合类型为IGrouping<键类型,值类型>(值类型就是数据源里的数据的类型,这里是ComManager,即u的类型.而键类型就是by后面的类型,这里为bool类型,每一个组都有一个键类型,这里如果键类型为true就说明该组的数据的管理员ID大于4),然后将这些集合付给(into)g,等到返回给result时又包了一层变成了IQueryable<IGrouping<bool,ComManager>>类型了

                         group u by u.ComManagerID>4  into g

                         select g;

先"剥掉"IQueryable<>,里面的item就是各个组了,其类型是IGrouping<bool,ComManager>

            foreach (var item in result)

            {

通过IGrouping<>的Key属性可以用来区分个组,然后根据条件选出一个组来进行操作

                if (item.Key==true)

                {

                    GridView1.DataSource = item;  可以想象IGrouping<>也继承自IEnumerable<>

                    GridView1.DataBind();

                }

            }

        }

可以看出LINQ里的group分组语句与SQL里的group分组语句不一样,SQL里的group分组语句作用是去掉重复的记录,并且select 1,2,3 from * group by 1,2,3里group by后面有1,2,3  select后面也必须是1,2,3     然后对于字段1,2,3都相同的记录只保留一条, 由于select后面只有1,2,3  所以该条记录也只有这三个字段

LINQ里的group分组语句通过LINQPad可以很好理解:

 

var result=from u in ComManagers group u by u.Name into g select g;

result.Dump();  C#Statement(s)  LINQPad里把每个表都变成了复数且区分大小写

根据企业管理员的名字分组(即名字相同的为一组),根据我们前面说的,每一组的类型为IGrouping<string,ComManager>,组的键类型是string,里面的元素类型为ComManager,看结果图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

看到每一个组都有一个Key了吧,我们可以想上面的代码那样通过这个Key属性来区分每一个组,然后再做不同处理

 

 

 

5.向数据库中插入数据

 

插入功能由Table<T>类的InsertOnSubmit()添加一条记录InsertAllOnSubmit<T>()添加多条记录

 protected void Button4_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            LeaveWord lw = new LeaveWord();

            lw.CompanyID = 19;

            lw.Accounter = "GJ";

            lw.Content = "贵公司......";

            lw.Reply = "?????";

            db.LeaveWord.InsertOnSubmit(lw);

            db.SubmitChanges();

        }

 protected void Button5_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            List<LeaveWord> list = new List<LeaveWord>();

            LeaveWord lw1 = new LeaveWord();

            lw1.CompanyID = 19;

            lw1.Accounter = "GJ";

            lw1.Content = "贵公司||||||||";

            lw1.Reply = "?????";

            LeaveWord lw2 = new LeaveWord();

            lw2.CompanyID = 19;

            lw2.Accounter = "GJ";

            lw2.Content = "贵公司/////";

            lw2.Reply = "?????";

            list.Add(lw1);

            list.Add(lw2);

            db.LeaveWord.InsertAllOnSubmit<LeaveWord>(list);   参数类型是IEnumerable<T>,但只要是继承自IEnumerable<T>的类型都可以,这里是List<T>

            db.SubmitChanges();

        }

6.修改数据库中的数据

一般步骤如下:

(1)使用LINQ查询找到要被修改的记录

(2)修改记录值

(3)调用SubmitChanges()方法将修改提交到数据库

 protected void Button6_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            使用LINQ查询找到要被修改的记录

            var result = from u in db.LeaveWord where u.Accounter.Equals("GJ") select u;

            foreach (var item in result)

            {

                修改记录值

                item.Content = "留言内容被修改!";

            }

            调用SubmitChanges()方法将修改提交到数据库

            db.SubmitChanges();

        }

7.删除数据库中的数据

删除功能由Table<T>类的DeleteOnSubmit()删除一条记录DeleteOnSubmit<T>()删除多条记录

一般步骤如下:

(1)使用LINQ查询找到要被删除的记录

(2)一般使用DeleteOnSubmit<T>()方法删除这些记录

(3)调用SubmitChanges()方法将删除提交到数据库

 protected void Button7_Click(object sender, EventArgs e)

        {

            linqtosqlDataContext db = new linqtosqlDataContext();

            使用LINQ查询找到要被删除的记录

            var result = from u in db.LeaveWord where u.Accounter.Equals("xb") select u;

            使用DeleteOnSubmit<T>()方法删除这些记录

            db.LeaveWord.DeleteAllOnSubmit<LeaveWord>(result);

            调用SubmitChanges()方法将删除提交到数据库

            db.SubmitChanges();

        }

值得注意的是以上5,6,7的增删改操作建议在.NET4.0下操作,在.NET3.5下会出现指定转换无效的Bug

8.使用存储过程操作数据库(参考链接3里的IExecuteResult,ISingleResult<T>,IMultipleResult三种接口)

分享到:
评论

相关推荐

    LINQ技术及编程5

    LINQ技术及编程 5 学习LINQ专用

    LINQ 技术介绍和使用

    【LINQ技术介绍和使用】 LINQ(Language Integrated Query,语言集成查询)是.NET框架中的一个强大特性,它允许开发者使用一致的语法在各种数据源上执行查询操作,包括关系数据库、XML文档、集合和对象。LINQ的核心...

    LINQ技术详解C# 2008版.pdf(压缩包)

    《LINQ技术详解C#2008版》将原理介绍与实践操作相结合,全面系统地阐述了Microsoft C# 2008中的语言集成查询(LINQ)技术的专业知识,包括其原理、功能和应用。特别对LINQ在对象、XML、数据集和SQL上的应用进行了...

    C#(ASP.NET 3.0/3.5)中LINQ技术文档

    **C#(ASP.NET 3.0/3.5)中的LINQ技术是.NET Framework 3.0和3.5版本引入的一项革命性特性,它代表了Language Integrated Query(语言集成查询)的缩写。LINQ允许开发人员使用相同的查询语法在各种数据源上进行操作,...

    LINQ技术详解C# 2008版 高清 书签

    LINQ技术详解C# 2008版 高清 书签。 便于阅读。

    LINQ技术详解C# 2008版(中文版).part1

    LINQ技术详解C# 2008版(中文版) LINQ技术详解C# 2008版(中文版)

    LINQ技术详解C# 2008版

    LINQ技术详解C# 2008版(中文版)(zmxy).pdf )

    LINQ技术经典示例

    **LINQ技术经典示例** LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本引入的一项重要技术,它为C#和Visual Basic等.NET编程语言提供了统一的查询语法,使得对各种数据源的查询变...

    高清完整版 LINQ技术详解C#

    高清完整版 LINQ技术详解C#

    LINQ技术详解C# 2008版(中文版)

    LINQ技术详解C# 2008版(中文版)

    LINQ技术详解C# 2008(中文版+完整书签)

    《LINQ技术详解C#2008版》将原理介绍与实践操作相结合,全面系统地阐述了Microsoft C# 2008中的语言集成查询(LINQ)技术的专业知识,包括其原理、功能和应用。

    LINQ技术详解 C# 2008版.part1

    LINQ技术详解 C# 2008版,主要讲解LINQ数据库与C#的连接和使用方法!

    通过linq技术对数据实现查询修改等操作

    **LINQ技术详解** LINQ(Language Integrated Query,语言集成查询)是.NET Framework 3.5及更高版本中引入的一项重要特性,它为C#和Visual Basic等编程语言提供了强大的数据查询能力。通过LINQ,开发者可以使用...

    LINQ技术详解C# 2008版(中文版).part6.rar

    LINQ技术详解C# 2008版(中文版),是很好的LINQ学习资源。

    Linq技术应用实例

    在这个“Linq技术应用实例”中,我们将深入探讨如何使用 LINQ to SQL 进行数据操作,主要包括创建应用程序界面、设置数据连接、执行查询、分页操作、添加数据、修改数据以及删除数据。 首先,创建应用程序界面是...

    Linq技术实例 Linq To Sql Linq To DataSet

    **Linq技术实例:Linq To Sql与Linq To DataSet** **一、Linq简介** Linq(Language Integrated Query,语言集成查询)是.NET Framework 3.5引入的一项创新技术,它将查询操作直接整合到C#和VB.NET等编程语言中,...

    LINQ技术详解C# 2008版.part2

    本书将原理介绍与实践操作相结合,全面系统地阐述了Microsoft C# 2008中的语言集成查询(LINQ)技术的专业知识,包括其原理、功能和应用。特别对LINQ在对象、XML、数据集和SQL上的应用进行了深入分析,详细讲解了...

    C# LinqXML使用LINQ技术创建XML文件

    本文将深入探讨如何使用C#的LinqXML技术通过LINQ技术创建XML文件。 首先,我们需要引入必要的命名空间,这包括`System.Xml.Linq`,它包含了处理XML的所有类: ```csharp using System.Xml.Linq; ``` 创建XML文件...

    asp.net3.5 linq技术源码

    压缩包中的四个文件可能分别包含了上述不同方面的示例代码和教程,帮助开发者深入理解和应用LINQ技术。通过学习这些文件,开发者可以掌握如何在ASP.NET 3.5环境中有效地使用LINQ进行数据操作,优化分页性能,并构建...

Global site tag (gtag.js) - Google Analytics