LINQ学习笔记(一)—感受篇

以前,由于同事的感染,ORM的一些开源框架小玩了一下,一直没有用到项目中,前天听说VS2008BETA2(微软一般是BETA2就到RTM,呵呵),想想是时候好好学学感受一下里面的LINQ.

 

感受微软的新东西,我习惯性的来到Scottgublog,果然一个系列已经有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:这里连接数据库有个小插曲,由于我找不来sql2005Northwind,所以就把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 ' )
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值