【问题标题】:How do i modify Linq generated sql statement?如何修改 Linq 生成的 sql 语句?
【发布时间】:2010-12-22 13:31:21
【问题描述】:

我在下面的代码中总结了我的问题。

NorthwindDataContext dc = new NorthwindDataContext();
        var query = from c in dc.Customers
                    select c;

上面的代码正在生成下面的sql语句

选择 [t0].[ID]、[t0].[FirstName]、[t0].[LastName] FROM [dbo].[客户] AS [t0]

现在我想像这样修改上面生成的查询

从 [dbo].[客户] 中选择 [t0].[ID]、[t0].[FirstName]、[t0].[LastName] AS [t0] WITH (nlock)

是否可以在 linq 中修改生成的查询?如果可以,那么如何修改?

【问题讨论】:

标签: c# linq


【解决方案1】:

您将无法以您想要的方式直接修改生成的 L2S T-SQL 代码(除非您修改事务隔离级别)。然而,我们已经相当简单地处理了这样的情况,方法是创建一个带有我们想要的锁定提示的视图并查询该视图,而不是直接查询表。

【讨论】:

    【解决方案2】:

    我找到了一个很handy tips 用于修改linq生成的sql语句。

    NorthwindDataContext db = new NorthwindDataContext(); 如果(db.Connection.State == System.Data.ConnectionState.Closed) db.Connection.Open(); var cmd = db.GetCommand(db.Customers.Where(p => p.ID == 1)); cmd.CommandText = cmd.CommandText.Replace("[Customers] AS [t0]", "[Customers] AS [t0] WITH (NOLOCK)"); var 结果 = db.Translate(cmd.ExecuteReader());

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 感谢回复。我会试试这些链接。
      猜你喜欢
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多