2010-09-06 65 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) 
    ...