去年,Scott Guthrie表示“如果您想要对执行的 SQL 进行绝对控制,您实际上可以覆盖 LINQ to SQL 使用的原始 SQL”,但我找不到描述可扩展性方法的文档。
我想修改以下 LINQ to SQL 查询:
使用 (NorthwindContext 北风 = 新 NorthwindContext ()) { var q = from row in northwind.Customers 让 orderCount = row.Orders.Count() 选择新的{ row.ContactName, 订单数 }; }
这导致以下 TSQL:
选择 [t0].[联系人姓名], ( 选择计数(*) FROM [dbo].[订单] AS [t1] WHERE [t1].[CustomerID] = [t0].[CustomerID] ) AS [orderCount] FROM [dbo].[客户] AS [t0]
到:
使用 (NorthwindContext 北风 = 新 NorthwindContext ()) { var q = from row in northwind.Customers.With ( TableHint.NoLock, TableHint.Index (0)) 让 orderCount = row.Orders.With ( TableHint.HoldLock).Count() 选择新的{ row.ContactName, 订单数 }; }
这将导致以下 TSQL:
选择 [t0].[联系人姓名], ( 选择计数(*) FROM [dbo].[Orders] AS [t1] WITH (HOLDLOCK) WHERE [t1].[CustomerID] = [t0].[CustomerID] ) AS [orderCount] FROM [dbo].[Customers] AS [t0] WITH (NOLOCK, INDEX(0))
使用:
公共静态表<TEntity> With<TEntity> ( 这个 Table<TEntity> 表, 参数 TableHint[] args) 其中 TEntity : 类 { //TODO:实现 返回表; } 公共静态 EntitySet<TEntity> With<TEntity> ( 这个 EntitySet<TEntity> 实体集, 参数 TableHint[] args) 其中 TEntity : 类 { //TODO:实现 返回实体集; }
和
公共类 TableHint { //TODO:实现 公共静态 TableHint 无锁; 公共静态 TableHint HoldLock; 公共静态 TableHint 索引(int id){ 返回空值; } 公共静态 TableHint 索引(字符串名称){ 返回空值; } }
使用某种类型的 LINQ to SQL 可扩展性,除了这个。有任何想法吗?