我如何修改Linq生成的sql语句?

时间:2010-12-21 12:39:48

标签: c# linq

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

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

以上代码生成以下sql语句

    SELECT [t0].[ID], [t0].[FirstName], [t0].[LastName]
FROM [dbo].[Customer] AS [t0]

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

SELECT [t0].[ID], [t0].[FirstName], [t0].[LastName] FROM [dbo].[Customer] 
AS [t0] WITH (nolock) 

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

我找到了一个非常handy tips来修改linq生成的sql语句。

 
NorthwindDataContext db = new NorthwindDataContext();
            if (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 results = db.Translate(cmd.ExecuteReader());

答案 2 :(得分:2)