加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何将Linq扩展到SQL?

发布时间:2020-12-12 08:39:55 所属栏目:MsSql教程 来源:网络整理
导读:去年,Scott Guthrie stated“如果您希望绝对控制执行的SQL,您实际上可以覆盖LINQ to SQL使用的原始SQL”,但是我找不到描述可扩展性方法的文档. 我想修改以下LINQ to SQL查询: using (NorthwindContext northwind = new NorthwindContext ()) { var q = from
去年,Scott Guthrie stated“如果您希望绝对控制执行的SQL,您实际上可以覆盖LINQ to SQL使用的原始SQL”,但是我找不到描述可扩展性方法的文档.

我想修改以下LINQ to SQL查询:

using (NorthwindContext northwind = new NorthwindContext ()) {
    var q = from row in northwind.Customers
            let orderCount = row.Orders.Count ()
            select new {
                row.ContactName,orderCount
            };
}

这导致以下TSQL:

SELECT [t0].[ContactName],(
    SELECT COUNT(*)
    FROM [dbo].[Orders] AS [t1]
    WHERE [t1].[CustomerID] = [t0].[CustomerID]
    ) AS [orderCount]
FROM [dbo].[Customers] AS [t0]

至:

using (NorthwindContext northwind = new NorthwindContext ()) {
    var q = from row in northwind.Customers.With (
                        TableHint.NoLock,TableHint.Index (0))
            let orderCount = row.Orders.With (
                        TableHint.HoldLock).Count ()
            select new {
                row.ContactName,orderCount
            };
}

这将导致以下TSQL:

SELECT [t0].[ContactName],(
    SELECT COUNT(*)
    FROM [dbo].[Orders] AS [t1] WITH (HOLDLOCK)
    WHERE [t1].[CustomerID] = [t0].[CustomerID]
    ) AS [orderCount]
FROM [dbo].[Customers] AS [t0] WITH (NOLOCK,INDEX(0))

使用:

public static Table<TEntity> With<TEntity> (
    this Table<TEntity> table,params TableHint[] args) where TEntity : class {

    //TODO: implement
    return table;
}
public static EntitySet<TEntity> With<TEntity> (
    this EntitySet<TEntity> entitySet,params TableHint[] args) where TEntity : class {

    //TODO: implement
    return entitySet;
}

public class TableHint {
    //TODO: implement
    public static TableHint NoLock;
    public static TableHint HoldLock;
    public static TableHint Index (int id) {
        return null;
    }
    public static TableHint Index (string name) {
        return null;
    }
}

使用某种类型的LINQ to SQL可扩展性,而不是this one.任何想法?

解决方法

更改底层提供程序并因此修改SQL的能力并没有使LINQ to SQL的最终裁剪.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读