2010-09-06 30 views
0

早上所有。当LINQ执行时暴露SQL触发

给你一个快速的问题 - 我在哪里可以找到LINQ语句触发时执行的SQL?

我有下面的代码一个可行的治疗,

var r = (from p in getproductweightsbuyer.tblWeights 
        where p.MemberId == memberid && 
           p.LocationId == locationid 
        select p); 

      if (buyer != "Not Specified") 
       r = r.Where(p => p.UnitUserField1 == buyer); 

      if (subcategory != "Not Specified") 
       r = r.Where(p => p.UnitUserField2 == subcategory); 

我只是不知道,在有条件的射击where子句的SQL。

+0

LINQ to SQL?实体框架?还有别的吗? – 2010-09-06 08:21:25

回答

1

如果您调试您的代码,您可以放置​​一个断点并分析r的值,该值将包含实际的SQL代码。

+0

感谢Stefan--我记不起SQL何时会暴露。 – 2010-09-06 08:24:36

2

如果你手头的数据库环境下,你可以尝试:上述选项

context.GetCommand(query).CommandText 
+0

不错 - 我不知道这件事。感谢Thorsten。 – 2010-09-06 08:25:42

1

除了,你也可以运行了SQL事件探查器,看看实际的SQL派下来的线连接到DB。

+0

这是有道理的......你可以告诉它是星期一!欢呼水稻。 – 2010-09-06 08:26:06

1

如果您使用LINQ to SQL,您可以设置DataContext.Log属性。当您执行查询时,这将会记录SQL:

getproductweightsbuyer.Log = Console.Out; 

var r = (from p in getproductweightsbuyer.tblWeights 
        where p.MemberId == memberid && 
          p.LocationId == locationid 
        select p); 

      if (buyer != "Not Specified") 
       r = r.Where(p => p.UnitUserField1 == buyer); 

      if (subcategory != "Not Specified") 
       r = r.Where(p => p.UnitUserField2 == subcategory); 

foreach (var row in r) 
    ...