gpt4 book ai didi

linq - 如何将 Linq 扩展到 SQL?

转载 作者:行者123 更新时间:2023-12-04 02:06:40 26 4
gpt4 key购买 nike

去年,斯科特·格思里 stated “如果您想要对执行的 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))

使用:

公共(public)静态表 With (
这个 Table 表,
参数 TableHint[] args) 其中 TEntity : 类 {

//TODO:实现
返回表;
}
公共(public)静态 EntitySet With (
这个 EntitySet 实体集,
参数 TableHint[] args) 其中 TEntity : 类 {

//TODO:实现
返回实体集;
}



公共(public)类 TableHint {
//TODO:实现
公共(public)静态 TableHint 无锁;
公共(public)静态 TableHint HoldLock;
公共(public)静态 TableHint 索引(int id){
返回空值;
}
公共(public)静态 TableHint 索引(字符串名称){
返回空值;
}
}

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

最佳答案

更改底层提供程序并因此修改 SQL 的能力并未最终影响 LINQ to SQL。

关于linq - 如何将 Linq 扩展到 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com