序:
一直有关注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
易用性是不错,可是有些地方,性能可能不是很理想。可能还有一些“机关”可以开启的,只是我还不知道。
回头搞一个实际些的例子再测试一下。