LINQ简易教程

LINQ,全称是Language Intergrated Query的缩写,即“集成语言查询”,利用LINQ可以使数据库的表像类一样使用,简单方便。

下面来用很短的篇幅简单地介绍一下LINQ的使用方法。

准备工作:在SQL SERVER数据库中建立相应的表

这个是一个准备工作,也可以使用ACCESS,Oracle等其他数据库,这里采用SQL SERVER是因为和微软的.NET平台有最好的契合度。

本文使用的是以前建好的练习用数据库。

在Visual Studio中新建C#工程(任意)

不论是控制台,Winform,还是ASP,都支持LINQ,这里我们以控制台程序为例。

先建立一个控制台程序工程。

单击菜单栏中“视图”,选择“服务器资源管理器”,打开“服务器资源管理器”窗口。

 

在“数据连接”选项上点右键,在弹出的菜单中选择“添加连接”,打开“选择数据源”对话框。

 

在打开的对话框中选择“Microsoft SQL Server”,点击“继续”。

 

在下一个对话框中填入服务器名称(本机的话填写localhost即可),选择“Windows账户登录”或者“SQL Server用户登录”,再选择要连接的数据库。单击“确定”。

 

完成后看到右边的“服务器资源管理器”窗口,我们添加的数据库就在这里。

 

在“解决资源管理器”中右击工程名,在弹出的菜单中选择“添加”--->“添加新项”,在打开的对话框中选择“LINQ to SQL类”,文件名任意,当然要符合命名规则。

 

添加完后的界面如下

 

这个时候就可以把你添加的数据库里的表都添加进来,添加进来后所有的要素都会在这里面出现,包括主键、外键等等

 

打开DataClasses1.Designer.cs文件,看看是不是所有的表都变成了C#类。

 

现在我们已经有了LINQ类,那么我们就可以像使用其他类一样去使用它们。

回到Program.cs文件,在Main方法中输入下列示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqTest
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建一个DataClass对象,就是在DataClass1.dbml里声明的
           DataClasses1DataContext da = new DataClasses1DataContext();
            
            try
            {
          //这里的LINQ查询语句和SQL里有一点点差别,具体的可以上网搜索
                var query = from s in da.sale_item
                            where s.unit_price > 2000
                            select s;

                Console.WriteLine();
                Console.WriteLine("查询结果");

                //查询语句返回的是一个集合,如果要查看里面的内容,必须要用foreach来循环.
                foreach (sale_item s in query)
                {
                    Console.WriteLine(s.order_no + " " + s.prod_no + " " + s.qty + " " + s.unit_price);
                }
                //以上是查询语句及结果

                //向数据库插入数据
                customer cus = new customer();
                cus.cust_no = "C1111";
                cus.cust_name = "ABCDEFG";
                cus.tel_no = "12345678";
                cus.zip = "100000";
                cus.addr = "ABCDEFG";
                //这两句话有点像以前学过的事务,只有在添加完成之后才会写入数据库
                da.customer.InsertOnSubmit(cus);
                da.SubmitChanges();

                Console.WriteLine();
                Console.WriteLine("插入数据后的执行结果");

                var query2 = from c in da.customer select c;
                foreach (customer c in query2)
                {
                    Console.WriteLine(c.cust_no + " " + c.cust_name + " " + c.addr + " " + c.tel_no + " " + c.zip);
                }

                //修改数据库的数据
                var result = from c in da.customer where c.cust_no == "C1111" select c;
                foreach (customer c in result)
                {
                    c.cust_name = "GFEDCBA";
                    c.tel_no = "87654321";
                    cus.zip = "999999";
                    cus.addr = "GFEDCBA";
                }
                da.SubmitChanges();

                Console.WriteLine();
                Console.WriteLine("修改数据后的执行结果");

                query2 = from c in da.customer select c;
                foreach (customer c in query2)
                {
                    Console.WriteLine(c.cust_no + " " + c.cust_name + " " + c.addr + " " + c.tel_no + " " + c.zip);
                }

                //删除数据
                var result2 = from c in da.customer
                              where c.cust_no == "C1111"
                              select c;
                foreach (customer c in result2)
                {
                    da.customer.DeleteOnSubmit(c);
                }
                da.SubmitChanges();

                Console.WriteLine();
                Console.WriteLine("删除数据后的执行结果");

                query2 = from c in da.customer select c;
                foreach (customer c in query2)
                {
                    Console.WriteLine(c.cust_no + " " + c.cust_name + " " + c.addr + " " + c.tel_no + " " + c.zip);
                }

            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }
}

执行结果如下:

原文地址:https://www.cnblogs.com/ryuasuka/p/2974553.html