vs2008 linq2sql继续挖掘bug:表达式列支持问题

        闲来无事...
        使用Adventureworks数据库测试了linq2sql,发现其对表达式列支持不好,测试代码如下:
             AdventureWorksDataContext db  =  new AdventureWorksDataContext();

            Customer c 
=  new Customer();
            c.ModifiedDate 
=  DateTime.Now;
            c.rowguid 
=  Guid.NewGuid();
            c.TerritoryID 
=   1 ;
            c.CustomerType 
=   ' S ' ;
            
// c.AccountNumber  =   " AW00000199 " ;
            db.Customers.Add(c);
            db.SubmitChanges();

        AccountNumber为表达式列,结果运行的时候抛出异常。
        同时,发现其分页算法效率有点低,代码如下:        
             AdventureWorksDataContext db = new AdventureWorksDataContext();
                var c 
=  db.Customers.Skip( 100 ).Take( 100 );
            
            /*SELECT TOP 
100  [t1].[CustomerID], [t1].[TerritoryID], [t1].[AccountNumber], [t1].[CustomerType], [t1].[rowguid], [t1].[ModifiedDate]
            FROM (
                SELECT ROW_NUMBER() OVER (ORDER BY [t0].[CustomerID], [t0].[TerritoryID], [t0].[AccountNumber], [t0].[CustomerType], [t0].[rowguid], [t0].[ModifiedDate]) AS [ROW_NUMBER], [t0].[CustomerID], [t0].[TerritoryID], [t0].[AccountNumber], [t0].[CustomerType], [t0].[rowguid], [t0].[ModifiedDate]
                FROM [Sales].[Customer] AS [t0]
                ) AS [t1]
            WHERE [t1].[ROW_NUMBER] 
>   100*/
            
        使用Sql Server Query Visualizer可以看到上面的sql代码。其Row_Number() over了全部的列, 我在Management Studio中运行的时候上面的sql代码大概花费了40毫秒(前后加上Select getdate()),而如果Row_Number 只over主键CustomerID的话,则没看到时间差距。
        

转载于:https://www.cnblogs.com/ofei/archive/2007/08/26/870482.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值