LINQ学习笔记(一)—感受篇
2007-09-24 23:53
375 查看
以前,由于同事的感染,对ORM的一些开源框架小玩了一下,一直没有用到项目中,前天听说VS2008到BETA2(微软一般是BETA2就到RTM了,呵呵),想想是时候好好学学感受一下里面的LINQ了.
感受微软的新东西,我习惯性的来到Scottgu的blog,果然一个系列已经有9篇之多了,还有一些视频,正合我意(其实很多中文webcast应该向国外的学习一下,人家总是短小精悍,难道说中文的就得罗嗦点,郁闷)
接着又看了MikeTaulty的视频,真是大呼过瘾啊,于是小玩了一把 J
在玩之前,先下一个小插件LINQ to SQL Debug Visualizer(LINQ的可视化调试工具),如果没有也没有关系,不过查看LINQ背后执行的真正SQL就麻烦点,使用SQL跟中器或者直接设断点,像Scottgu那样打开记事本Ctrl+V,呵呵.
LINQ to SQL Debug Visualizer具体可参考一个兄弟的帖子:
http://www.cnblogs.com/xuhy-developer/archive/2007/08/11/852035.aspx
下面来做做MikeTaulty的例子,是一个控制台简单的程序:
Step 1.添加一个dbml的文件,命名为Northwind.dbml,下面是它的结构
(PS:记得在Scottgu的一篇文章中提到,为了区分表和这些实体之间的名字问题,使用LINQ设计器的时候,那些名字会自动去掉复数,但我的就没有,我想可能是使用的是中文的VS,所以这一特性被去掉了吧,毕竟有时有些是中文的表名也遇到过,呵呵,瞎猜的)
Step 2.建立简单的控制台程序,代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqTest1
...{
class Program
...{
static void Main(string[] args)
...{
NorthwindDataContext ctx = new NorthwindDataContext("server=./SQLEXPRESS;database=northwind");
var query = from o in ctx.Orders
where o.Customers.City == "Berlin" && o.ShipCity == "Berlin"
select new
...{
CustomerName = o.Customers.ContactTitle + " " + o.Customers.ContactName,
OrderNo = o.OrderID,
TotalValue = o.Order_Details.Sum(od => od.UnitPrice * od.Quantity)
};
foreach (var v in query)
...{
Console.WriteLine(v);
}
Console.ReadLine();
}
}
}
(PS:这里连接数据库有个小插曲,由于我找不来sql2005的Northwind,所以就把2000中附加到我的SQL2005 EXPRESS中,结果测试的时候老报错误,跟着错误又设权限,又设链接方法什么的,最后还是没有搞定,最后还是老老实实的自己用脚本在SQL2005 EXPRESS中生成了一个,甚是纳闷 T_T)
运行结果:
实际生成的SQL:
SELECT ([t1].[ContactTitle] + ' ') + [t1].[ContactName] AS [value], [t0].[OrderID], (
SELECT SUM([t2].[UnitPrice] * (CONVERT(Decimal(29,4),[t2].[Quantity])))
FROM [dbo].[Order Details] AS [t2]
WHERE [t2].[OrderID] = [t0].[OrderID]
) AS [value2]
FROM [dbo].[Orders] AS [t0]
LEFT OUTER JOIN [dbo].[Customers] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID]
WHERE ([t1].[City] = 'Berlin') AND ([t0].[ShipCity] = 'Berlin')
感受微软的新东西,我习惯性的来到Scottgu的blog,果然一个系列已经有9篇之多了,还有一些视频,正合我意(其实很多中文webcast应该向国外的学习一下,人家总是短小精悍,难道说中文的就得罗嗦点,郁闷)
接着又看了MikeTaulty的视频,真是大呼过瘾啊,于是小玩了一把 J
在玩之前,先下一个小插件LINQ to SQL Debug Visualizer(LINQ的可视化调试工具),如果没有也没有关系,不过查看LINQ背后执行的真正SQL就麻烦点,使用SQL跟中器或者直接设断点,像Scottgu那样打开记事本Ctrl+V,呵呵.
LINQ to SQL Debug Visualizer具体可参考一个兄弟的帖子:
http://www.cnblogs.com/xuhy-developer/archive/2007/08/11/852035.aspx
下面来做做MikeTaulty的例子,是一个控制台简单的程序:
Step 1.添加一个dbml的文件,命名为Northwind.dbml,下面是它的结构
(PS:记得在Scottgu的一篇文章中提到,为了区分表和这些实体之间的名字问题,使用LINQ设计器的时候,那些名字会自动去掉复数,但我的就没有,我想可能是使用的是中文的VS,所以这一特性被去掉了吧,毕竟有时有些是中文的表名也遇到过,呵呵,瞎猜的)
Step 2.建立简单的控制台程序,代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqTest1
...{
class Program
...{
static void Main(string[] args)
...{
NorthwindDataContext ctx = new NorthwindDataContext("server=./SQLEXPRESS;database=northwind");
var query = from o in ctx.Orders
where o.Customers.City == "Berlin" && o.ShipCity == "Berlin"
select new
...{
CustomerName = o.Customers.ContactTitle + " " + o.Customers.ContactName,
OrderNo = o.OrderID,
TotalValue = o.Order_Details.Sum(od => od.UnitPrice * od.Quantity)
};
foreach (var v in query)
...{
Console.WriteLine(v);
}
Console.ReadLine();
}
}
}
(PS:这里连接数据库有个小插曲,由于我找不来sql2005的Northwind,所以就把2000中附加到我的SQL2005 EXPRESS中,结果测试的时候老报错误,跟着错误又设权限,又设链接方法什么的,最后还是没有搞定,最后还是老老实实的自己用脚本在SQL2005 EXPRESS中生成了一个,甚是纳闷 T_T)
运行结果:
实际生成的SQL:
SELECT ([t1].[ContactTitle] + ' ') + [t1].[ContactName] AS [value], [t0].[OrderID], (
SELECT SUM([t2].[UnitPrice] * (CONVERT(Decimal(29,4),[t2].[Quantity])))
FROM [dbo].[Order Details] AS [t2]
WHERE [t2].[OrderID] = [t0].[OrderID]
) AS [value2]
FROM [dbo].[Orders] AS [t0]
LEFT OUTER JOIN [dbo].[Customers] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID]
WHERE ([t1].[City] = 'Berlin') AND ([t0].[ShipCity] = 'Berlin')
相关文章推荐
- LINQ学习笔记(二)--感受篇二
- Linq to DataSet 学习笔记一
- LINQ 学习笔记之存储过程!
- C#学习笔记(八)—–LINQ查询创建策略
- 强大的DataGrid组件[3]_数据交互之Linq to SQL——Silverlight学习笔记
- LINQ学习笔记——(2)Lambda表达式
- linq to sql 语法 学习笔记(1)
- Sharepoint学习笔记---SPList--使用Linq to Sharepoint间接查询External List(1.通过BCS创建External List)
- Linq to Xml 学习笔记一
- LINQ 学习笔记8
- C# 3 新特性 Linq 学习笔记(一)
- Linq 学习笔记之 linq to object
- Linq学习笔记(1.4)——orderby、Reverse()
- (转)Linq学习笔记
- VS2005 ASP.NET本地化学习笔记&感受
- Linq 学习笔记(一)
- C# 2008 学习笔记 - LINQ to XML
- Linq学习笔记
- linq学习笔记1
- LINQ to SQL学习笔记(二)——Select