序:
一直有关注linq.从来都没有在实际的项目中使用过。最近想将其用于实际项目中,实际了解一下其生成的SQL语句。
Code
1
2 public static void LinqTest()
3 {
4 //新建一个linq to sql 名字叫 Northwind,把相关的几个表托进去。测试开始
5 NorthwindDataContext nd = new NorthwindDataContext();
6
7 Console.WriteLine(nd.Categories.Count());
8 //这里执行了SQL sql2k
9 //exec sp_reset_connection
10 //SELECT COUNT(*) AS [value] FROM [dbo].[Categories] AS [t0]
11 Console.Read();
12
13 System.Data.Linq.Table<Products> products = nd.Products;
14
15 /**//*IQueryable<Products>*/
16 var p = from s in products where s.CategoryID == 1 select s;
17 //这个非结果。存放着等待执行的SQL语句
18 Console.Read();
19 //这里还未执行
20 Console.WriteLine("开始执行SQL语句");
21
22 foreach (var item in p)
23 {
24 Console.WriteLine(item.ProductName);
25 }
26 //这里执行了SQL
27 //exec sp_executesql N'SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
28 //FROM [dbo].[Products] AS [t0]
29 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
30 Console.WriteLine("p执行了吗");
31 Console.Read();
32
33 foreach (var item in p)
34 {
35 Console.WriteLine(item.Categories.CategoryName);//Beverages
36 item.Categories.CategoryName = "Beverages";
37 }
38 //这里执行了SQL
39 //exec sp_executesql N'SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
40 //FROM [dbo].[Products] AS [t0]
41 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
42 //------------------------------------------居然又重覆调用了一次。晕倒
43 //exec sp_executesql N'SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture]
44 //FROM [dbo].[Categories] AS [t0]
45 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
46 Console.Read();
47
48 Console.WriteLine("按回车更新");
49
50 Console.Read();
51 nd.SubmitChanges();
52 //当数据有发生改变时---更改上面的类名赋值
53 //SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION
54 //exec sp_executesql N'UPDATE [dbo].[Categories]
55 //SET [CategoryName] = @p2
56 //WHERE ([CategoryID] = @p0) AND ([CategoryName] = @p1)', N'@p0 int,@p1 nvarchar(9),@p2 nvarchar(5)', @p0 = 1, @p1 = N'Beverages', @p2 = N'bbbbb'
57 //COMMIT TRANSACTION
58 Console.Read();
59
60 //当数据没有发生改变时
61 //SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION
62 //COMMIT TRANSACTION
63 //也执行了SQL语句。
64
65 var list = p.ToList<products>();
66 //--------------
67 Console.WriteLine("效率提升");
68
69 Console.Read();
70 foreach (var item in list)
71 {
72 Console.WriteLine(item.ProductName);
73 }
74 Console.Read();
75 foreach (var item in list)
76 {
77 Console.WriteLine(item.ProductName);
78 }
79 Console.Read();
80
81
82 }
83
1
2 public static void LinqTest()
3 {
4 //新建一个linq to sql 名字叫 Northwind,把相关的几个表托进去。测试开始
5 NorthwindDataContext nd = new NorthwindDataContext();
6
7 Console.WriteLine(nd.Categories.Count());
8 //这里执行了SQL sql2k
9 //exec sp_reset_connection
10 //SELECT COUNT(*) AS [value] FROM [dbo].[Categories] AS [t0]
11 Console.Read();
12
13 System.Data.Linq.Table<Products> products = nd.Products;
14
15 /**//*IQueryable<Products>*/
16 var p = from s in products where s.CategoryID == 1 select s;
17 //这个非结果。存放着等待执行的SQL语句
18 Console.Read();
19 //这里还未执行
20 Console.WriteLine("开始执行SQL语句");
21
22 foreach (var item in p)
23 {
24 Console.WriteLine(item.ProductName);
25 }
26 //这里执行了SQL
27 //exec sp_executesql N'SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
28 //FROM [dbo].[Products] AS [t0]
29 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
30 Console.WriteLine("p执行了吗");
31 Console.Read();
32
33 foreach (var item in p)
34 {
35 Console.WriteLine(item.Categories.CategoryName);//Beverages
36 item.Categories.CategoryName = "Beverages";
37 }
38 //这里执行了SQL
39 //exec sp_executesql N'SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
40 //FROM [dbo].[Products] AS [t0]
41 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
42 //------------------------------------------居然又重覆调用了一次。晕倒
43 //exec sp_executesql N'SELECT [t0].[CategoryID], [t0].[CategoryName], [t0].[Description], [t0].[Picture]
44 //FROM [dbo].[Categories] AS [t0]
45 //WHERE [t0].[CategoryID] = @p0', N'@p0 int', @p0 = 1
46 Console.Read();
47
48 Console.WriteLine("按回车更新");
49
50 Console.Read();
51 nd.SubmitChanges();
52 //当数据有发生改变时---更改上面的类名赋值
53 //SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION
54 //exec sp_executesql N'UPDATE [dbo].[Categories]
55 //SET [CategoryName] = @p2
56 //WHERE ([CategoryID] = @p0) AND ([CategoryName] = @p1)', N'@p0 int,@p1 nvarchar(9),@p2 nvarchar(5)', @p0 = 1, @p1 = N'Beverages', @p2 = N'bbbbb'
57 //COMMIT TRANSACTION
58 Console.Read();
59
60 //当数据没有发生改变时
61 //SET TRANSACTION ISOLATION LEVEL READ COMMITTED;BEGIN TRANSACTION
62 //COMMIT TRANSACTION
63 //也执行了SQL语句。
64
65 var list = p.ToList<products>();
66 //--------------
67 Console.WriteLine("效率提升");
68
69 Console.Read();
70 foreach (var item in list)
71 {
72 Console.WriteLine(item.ProductName);
73 }
74 Console.Read();
75 foreach (var item in list)
76 {
77 Console.WriteLine(item.ProductName);
78 }
79 Console.Read();
80
81
82 }
83
易用性是不错,可是有些地方,性能可能不是很理想。可能还有一些“机关”可以开启的,只是我还不知道。
回头搞一个实际些的例子再测试一下。