2013-08-14 11 views
31

मेरे पास एक प्रश्न है जो मैं पैरामीटर के रूप में byte[] पास कर रहा हूं। मैं SQL क्वेरी को इसके बारे में प्राप्त करने का प्रयास कर रहा हूं और प्रबंधन स्टूडियो में उस क्वेरी को डीबग करने के लिए चला रहा हूं। मैं इसे से SQL कथन कैसे निकाल सकता हूं?LINQ से SQL क्वेरी में SQL क्वेरी प्राप्त करें?

committeeMember = 
      db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number 
      && x.Position_Start_Date.Value.Year == activity.EndDate 
      && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1); 
+4

LINQPad भी आप एसक्यूएल देख सकते हैं और सीधे – Hogan

उत्तर

59

डिबगर मंडराना माउस में commiteeMember से अधिक चर - यह उत्पन्न SQL क्वेरी दिखाएगा:

enter image description here

यही तो क्वेरी के लिए ToString() रिटर्न। आप मैन्युअल रूप से ToString को फोन करके एक ही उत्पन्न SQL क्वेरी प्राप्त कर सकते हैं:

string sql = committeeMember.ToString(); 

यह ओवरराइड विधि आंतरिक ObjectQuery.ToTraceString() जो आदेशों डेटा स्रोत पर चलेगा रिटर्न कहता है।


इसके अलावा, आप को देखने के लिए जो SQL क्वेरी मार डाला गया था एसक्यूएल प्रोफाइलर या इकाई की रूपरेखा प्रोफाइलर उपयोग कर सकते हैं।

+0

जिज्ञासा से बाहर एसक्यूएल को चलाने के लिए अनुमति होगी, वहाँ यह प्रोग्राम के रूप में करने के लिए एक तरीका है? – gunr2171

+0

@ gunr2171 सुनिश्चित करें, अद्यतन जवाब –

+0

एसक्यूएल प्रोफाइलर या इकाई फ्रेम काम प्रोफाइलर एसक्यूएल सर्वर मशीन या मेरी स्थानीय मशीन पर चलाने की जरूरत है? – James123

14

संयोग से, LINQ से SQL SQL इकाई संरचना नहीं है। यदि पूर्व, आप [yourDataContext].Log = Console.Out (या some other stream writer) सेट कर सकते हैं और क्वेरी प्राप्त कर सकते हैं।

क्वेरी आपके पास, में यह लिखने पर विचार के रूप में ToString चाल करने के लिए सक्षम होने के लिए इस प्रकार है:

var committeeMemberQuery = 
      db.Committee_Member.*WHERE* 
      (x => 
       x.Customer_Number == activity.Contact.Number 
       && x.Position_Start_Date.Value.Year == activity.EndDate 
       && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1 
      ); 

var committeeMember = committeeMemberQuery.FirstOrDefault(); 

अब आप committeeMemberQuery.ToString() कर सकते हैं लेकिन आप पैरामीटर जानकारी नहीं मिलेगा (आप DataContext.Log = Console.Out लेकिन फिर से साथ होगा , कि इकाई की रूपरेखा नहीं है, यह एसक्यूएल को LINQ है।

+1

मैंने कुछ अन्य कार्यान्वयन के लिए एक लिंक जोड़ा। आईएमओ, "अन्य स्ट्रीमराइटर" विकल्प उच्चतम मतदान वाले उत्तर से बेहतर है, क्योंकि वह विकल्प आपको 'DataContext.SubmitChanges' को कॉल करते समय उत्पन्न होने वाले सम्मिलित/अद्यतन संचालन के लिए उत्पन्न एसक्यूएल देखने की अनुमति देता है। – RubberDuck

+0

[yourDataContext] .Database.Log = , यदि आप डीबीकॉन्टेक्स्ट का उपयोग कर रहे हैं। – mhenry1384