vs2008 linq2sql继续挖掘bug:表达式列支持问题
2007-08-26 20:47
447 查看
闲来无事...
使用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的话,则没看到时间差距。
使用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的话,则没看到时间差距。
相关文章推荐
- 两个BUG 一个是linq to sql 并发问题一个是跨年问题
- 提交了 VS 2008 sp1 对 Linq to SQL 的 xml 字段类型支持的一个 bug
- 提交了 VS 2008 sp1 对 Linq to SQL 的 xml 字段类型支持的一个 bug
- LINQ to SQL的默认值问题:若干Bug与解决办法
- LINQ to SQL的默认值问题
- 在win7系统中安装sqlserver2005出现 [Microsoft][SQL Native Client]客户端不支持加密问题!
- Linq to Sql中使用自定义枚举类型的奇怪问题
- linq表达式中不支持Convert和Parse类型转换
- LINQ to SQL 分页问题
- linq to sql 还没解决的问题
- webbug 乱码问题(普通的过滤器只支持form 的method="post")
- 盘点MonetDB几个关键不支持的SQL语法导致的问题
- sql语句-linq语言-lambda表达式对照
- 解决 LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”
- Linq to SQL bug: Char(1) maps to System.Char
- VS2008中ATL项目“对象不支持此属性和方法”问题
- sql语句-linq语言-lambda表达式对照
- Linq to sql 迭代器bug?
- sql语句-linq语言-lambda表达式对照
- LINQ to SQL 动态数据支持