LINQPad [विस्तार] तरीके


144

क्या किसी के पास लिनक्यूपैड विस्तार विधियों और विधियों की पूरी सूची है, जैसे कि

.Dump()

SubmitChanges()

1
मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि LINQPad एक कभी-बदलने वाला उपकरण है, इस प्रश्न पर एक ठोस और ठोस और अंतिम उत्तर होने से बहुत कम जीवन होगा। मैं अन्य उपकरणों के लिए इसी तरह के सवालों को बढ़ावा देने से बचने के लिए इसे ऑफ-टॉपिक के रूप में बंद करने का प्रस्ताव करता हूं।
लास वी। कार्लसन

5
ऐसा नहीं है कि मुझे मतदान के बारे में कुछ भी कहना है, लेकिन मैं निश्चित रूप से इस उत्तर को बंद करने से असहमत हूं। सबसे पहले, प्रश्न के लिए अपवोट्स को देखें, फिर पहले दो टिप्पणियों के लिए अपवोट्स को देखें। दूसरा, यूसुफ के उत्तर अंतिम उत्तर से कम कैसे हो सकते हैं; उसने बात लिखी। अंत में, अन्य एप्लिकेशन अपने प्रलेखन के लिए स्टैकवॉटरफ़्लो का उपयोग करते हैं। मैं हर समय विकास के लिए LinqPad का उपयोग करता हूं, C # और Linq क्वेरी को प्रोटोटाइप कर रहा हूं, SQL चला रहा हूं, और त्वरित DBA कार्य और दर्जनों अन्य चीजें कर रहा हूं। तो, कम से कम मेरे लिए, विषय पर उत्तर निश्चित रूप से हैं।
EoRaptor013

3
फिर से बंद करना: मैंने सी # पर पुराने प्रश्नों के एक से अधिक उत्तर जोड़े हैं ताकि एक और आधुनिक तकनीक प्रदान की जा सके जो प्रश्न का उत्तर देने के बाद से भाषा में पेश की गई है। IMO से हमें यह उम्मीद करनी चाहिए कि यह साइट जिस नॉलेजबेस का प्रतिनिधित्व करती है, वह संशोधित है और जैसे-जैसे तकनीक आगे बढ़ती है, इसे अपडेट किया जाता है। उन विषयों की श्रेणी, जहां भविष्य के अपडेट किसी विशेष बिंदु पर दिए गए उत्तरों को समझौता या अशक्त कर सकते हैं, वे काफी व्यापक हैं: यदि हमने उन सभी सवालों को बंद कर दिया, जहां ऐसा हो सकता है, तो स्टैक ओवरफ्लो एक बहुत खराब संसाधन होगा! यहाँ, एक पूरी सूची एक आंशिक सूची बन सकती है जो बिना किसी सूची के बेहतर है!
बॉब समर्स

जवाबों:


255

LINQPad दो विस्तार के तरीकों (LINQPad.Extensions में), अर्थात् को परिभाषित करता है Dump()और Disassemble()Dump()LINQPad के आउटपुट फॉर्मेटर का उपयोग करके आउटपुट विंडो पर लिखते हैं और आपको एक शीर्षक निर्दिष्ट करने के लिए अतिभारित किया जाता है:

typeof (int).Assembly.Dump ();
typeof (int).Assembly.Dump ("mscorlib");

आप 5 स्तरों के डिफ़ॉल्ट को ओवरराइड करने के लिए अधिकतम पुनरावृत्ति गहराई भी निर्दिष्ट कर सकते हैं:

typeof (int).Assembly.Dump (1);              // Dump just one level deep
typeof (int).Assembly.Dump (7);              // Dump 7 levels deep
typeof (int).Assembly.Dump ("mscorlib", 7);  // Dump 7 levels deep with heading

Disassemble () किसी भी तरीके को disassembles करता है IL, एक स्ट्रिंग में आउटपुट लौटाता है:

typeof (Uri).GetMethod ("GetHashCode").Disassemble().Dump();

उन दो विस्तार विधियों के अलावा, LINQPad.Util में कुछ उपयोगी स्थिर तरीके हैं। ये स्वत: पूर्णता में प्रलेखित हैं, और इसमें शामिल हैं:

  • सीएमडी - एक शेल कमांड या बाहरी प्रोग्राम निष्पादित करता है
  • CreateXhtmlWriter - एक पाठ लेखक बनाता है जो LINQPad के डंप () फॉर्मेटर का उपयोग करता है
  • SqlOutputWriter - SQL आउटपुट विंडो पर लिखने वाले टेक्स्ट राइटर को लौटाता है
  • GetMyQueries , GetSamples - आपके सहेजे गए प्रश्नों / नमूनों का प्रतिनिधित्व करने वाली वस्तुओं का एक संग्रह लौटाता है (उदाहरण के लिए, संपादन का उपयोग करके खोज निष्पादित करें। सभी खोजें)
  • हाइलाइट - एक ऑब्जेक्ट लपेटता है ताकि यह डंप होने पर पीले रंग में उजागर हो
  • क्षैतिज रेखा - आपको एक ही पंक्ति में वस्तुओं की एक श्रृंखला डंप करने देता है

LINQPad हाइपरलिंक वर्ग भी प्रदान करता है। इसके दो उद्देश्य हैं: पहला साधारण हाइपरलिंक प्रदर्शित करना है:

new Hyperlinq ("www.linqpad.net").Dump();
new Hyperlinq ("www.linqpad.net", "Web site").Dump();
new Hyperlinq ("mailto:user@domain.com", "Email").Dump();

आप इसे इसके साथ जोड़ सकते हैं Util.HorizontalRun:

Util.HorizontalRun (true,
  "Check out",
   new Hyperlinq ("http://stackoverflow.com", "this site"),
  "for answers to programming questions.").Dump();

परिणाम:

की जाँच करें इस साइट सवाल प्रोग्रामिंग के उत्तर के लिए।

हाइपरलिंक का दूसरा उद्देश्य गतिशील रूप से प्रश्नों का निर्माण करना है:

// Dynamically build simple expression:
new Hyperlinq (QueryLanguage.Expression, "123 * 234").Dump();

// Dynamically build query:
new Hyperlinq (QueryLanguage.Expression, @"from c in Customers
where c.Name.Length > 3
select c.Name", "Click to run!").Dump();

आप LINQPad में अपने खुद के विस्तार के तरीके भी लिख सकते हैं। 'मेरी क्वेरी' पर जाएं और 'माय एक्सटेंशन्स' नामक क्वेरी पर क्लिक करें। यहाँ पर परिभाषित किसी भी प्रकार / तरीके सभी प्रश्नों के लिए सुलभ हैं:

void Main()
{
  "hello".Pascal().Dump();  
}

public static class MyExtensions
{
  public static string Pascal (this string s)
  {
    return char.ToLower (s[0]) + s.Substring(1);
  }
}

4.46 (.02) में नई कक्षाएं और विधियाँ प्रस्तुत की गई हैं :

  • DumpContainer (वर्ग)
  • OnDemand (विस्तार विधि)
  • Ut.P.ProgressBar (वर्ग)

इसके अतिरिक्त, हाइपरलिंक वर्ग अब एक एक्शन डेलीगेट का समर्थन करता है जिसे आपको लिंक पर क्लिक करने पर बुलाया जाएगा, जिससे आप इसे कोड में प्रतिक्रिया दे सकते हैं और न केवल बाहरी वेबपृष्ठों से लिंक कर सकते हैं।

DumpContainer एक वर्ग है जो आउटपुट विंडो में एक ब्लॉक जोड़ता है जो कि इसकी सामग्री को प्रतिस्थापित कर सकता है।

ध्यान दें! के लिए याद रखें उचित स्थान में ही।.Dump()DumpContainer

काम में लाना:

var dc = new DumpContainer();
dc.Content = "Test";
// further down in the code
dc.Content = "Another test";

OnDemandएक विस्तार विधि है जो अपने पैरामीटर की सामग्री को आउटपुट विंडो में आउटपुट नहीं करेगी, बल्कि एक क्लिक करने योग्य लिंक जोड़ देगी, जब क्लिक किया गया लिंक .Dump()पैरामीटर की एड सामग्री के साथ बदल देगा । यह कभी-कभी आवश्यक डेटा संरचनाओं के लिए बहुत अच्छा है जो महंगा है या बहुत अधिक स्थान लेता है।

ध्यान दें! उपयुक्त स्थान पर .Dump()कॉल करने के परिणामों को याद रखें OnDemand

इसके प्रयेाग के लिए:

Customers.OnDemand("Customers").Dump(); // description is optional

Util.ProgressBar एक वर्ग है जो आउटपुट विंडो के अंदर एक ग्राफिकल प्रोग्रेसबार दिखा सकता है, जिसे कोड के चलते ही बदला जा सकता है।

ध्यान दें! .Dump()उपयुक्त स्थान पर Util.ProgressBar ऑब्जेक्ट को याद रखें ।

इसके प्रयेाग के लिए:

var pb = new Util.ProgressBar("Analyzing data");
pb.Dump();
for (int index = 0; index <= 100; index++)
{
    pb.Percent = index;
    Thread.Sleep(100);
}

33
खुद लेखक के जवाब से बेहतर कुछ नहीं!
जॉन

1
जो, मैं वास्तव में कुछ ग्राफिक्स के रूप में अच्छी तरह से काम करना चाहता था और फिर एक बिटमैप डंप करना चाहता था; यह इस तरह के काम के लिए एक शो विधि के साथ बहुत अच्छा होगा जहाँ आप कुछ विज़ुअलाइज़ेशन चाहते हैं, ग्राफिक्स, इमेज इत्यादि पर काम कर रहे हैं। संभवतः सड़क के नीचे कुछ अन्य प्रकार के लिए स्वच्छ दृश्य प्रदान कर रहे हैं।
बेंट रासमुसेन

... दरअसल, जब तक आप आउटपुट पैनल पर ग्राफिक्स भेज सकते हैं, हम बाकी के लिए एक्सटेंशन बना सकते हैं।
बेंट रासमुसेन

3
4.26 बीटा आपको Util.RawHtml कहकर XHTML को आउटपुट स्ट्रीम में इंजेक्ट करने की सुविधा देता है। Www.linqpad.net/beta.aspx पर जाएं (या RTM के लिए कुछ दिन प्रतीक्षा करें)।
जो अलबहारी

1
एलेक्स - एक लाइन पर प्राप्त करने के लिए> 1 बात है, Util.HorizontalRun का उपयोग
जो Albahari

131

अच्छी तरह से ज्ञात के अलावा myQuery.Dump("Query result:"), उल्लेख करने के लिए एक और विशेषता Utilवर्ग है: इसमें कई काफी आसान तरीके हैं (उनमें से कुछ मैंने उल्लेख किया है, लेकिन बहुत अधिक हैं)।

यह भी दिलचस्प है कि आप काम करने के तरीकेDump() को संशोधित कर सकते हैं ।

अंत में मैं तुम्हें दिखाता हूँ कैसे आप कर सकते हैं परिवर्तनों को स्थायी बनाने के (यानी डालने, अद्यतन, हटाने LINQ प्रश्नों) का उपयोग कर SubmitChanges()या SaveChanges()कैसे आप LINQPad के आंतरिक कनेक्शन वस्तु का उपयोग कर सकते हैं और साथ ही।

और इसे गोल करने के लिए, मैं आपको दिखाता हूँ कि आप LinqPad के अंदर सरल 2d ग्राफ़िक कैसे बना सकते हैं ( रेखाएँ, बिटमैप या फ़ंक्शन आरेखण )।

तो, यहाँ LinqPad सुविधाओं में निर्मित (उपकरण के साथ मेरे अपने अनुभव से) का एक संग्रह है :


.Dump ()

(LinqPad v5.03.08 और इसके बाद के संस्करण में उपलब्ध पैरामीटर)

सभी LinqPad उपयोगकर्ता .Dump()विस्तार विधि को जानते हैं और पसंद करते हैं , जो सब कुछ उपभोग और प्रिंट करता है (लगभग)।

लेकिन क्या आप जानते हैं कि कुछ पैरामीटर उपलब्ध हैं? इस कोड स्निपेट पर एक नज़र डालें:

var obj=new { a="Hello", b=5, c="World", d=new { y=5, z=10 } };
obj.Dump(description: "1st example", depth: 5, toDataGrid: false, exclude: "b,d");
obj.Dump("2nd example", exclude: "a,c");
obj.Dump("2nd example", exclude: "+b,d"); // new in V5.06.06 beta

1 उदाहरण प्रिंट केवल चर aऔर cऔर खाल bऔर d, 2 उदाहरण विपरीत (ध्यान दें कि यह निर्दिष्ट करता उपलब्ध मापदंडों के केवल 2) करता है। चर yऔर zव्यक्तिगत रूप से छुपाया नहीं जा सकता, क्योंकि वे शीर्ष स्तर पर नहीं हैं।

निम्नलिखित पैरामीटर उपलब्ध हैं ( सभी वैकल्पिक हैं ):

  • description [स्ट्रिंग] - डंप करने के लिए ऑब्जेक्ट के लिए एक विवरण प्रदान करता है
  • depth [int?] - सीमाएं कितनी गहराई से वस्तुओं का पुनरावर्ती निरीक्षण करती हैं
  • toDataGrid [बूल] - यदि सही है, तो आउटपुट रिचटैक्स के बजाय डेटाग्रिड के रूप में स्वरूपित है
  • exclude[स्ट्रिंग] - यदि आप चर की अल्पविराम से अलग सूची प्रदान करते हैं, तो उन्हें आउटपुट से बाहर रखा जाएगा (उदाहरण में "a, c": bऔर dदिखाए गए हैं, aऔर cछिपे हुए हैं)
  • exclude[स्ट्रिंग] "+" उपसर्ग के साथ - उपसर्ग बाहर के पैरामीटर के तर्क को अयोग्य बनाता है। इसका मतलब है, यदि आप चर की अल्पविराम से अलग की गई सूची प्रदान करते हैं, तो निर्दिष्ट किए गए को छोड़कर सभी छिपे हुए हैं (उदाहरण में "+ b, d": bऔर dदिखाए गए हैं, अन्य सभी छिपे हुए हैं)
  • एक चर में शामिल और बहिष्कृत गुणों को संग्रहीत करें (LinqPad V5.09.04 के बाद से नया):
    var x=Util.ToExpando(obj, "a, c", "b, d"); x.Dump();
    पहली स्ट्रिंग में शामिल करने के लिए गुणों की एक सूची है, दूसरी स्ट्रिंग को बाहर करने के लिए एक सूची है।
  • क्लिक पर विस्तार करें: यदि आप .OnDemand("click me").Dump();इसके बजाय उपयोग करते हैं .Dump(), तो यह एक लिंक प्रदर्शित करेगा जिस पर आप विस्तार करने के लिए क्लिक कर सकते हैं। उपयोगी है यदि आप मानों का निरीक्षण करना चाहते हैं, उदाहरण के Util.OnDemand("Customer-ID: " + customerObject.ID.ToString(), ()=>customerObject, false).Dump();लिए आईडी को हमेशा डिफ़ॉल्ट रूप से दिखाएं, लेकिन customerObjectयदि आप में रुचि रखते हैं तो केवल तभी विवरण प्रकट करें ।

डंप के बारे में अधिक उन्नत विषयों को यहां और वहां पाया जा सकता है ।


वातावरण

यह एक LinqPad एक्सटेंशन नहीं है, बल्कि एक .NET क्लास है, लेकिन चूंकि यह उपयोगी है, इसलिए मैं इसे वैसे भी उल्लेख करूंगा। आप अपनी स्क्रिप्ट में बहुत सी उपयोगी जानकारी प्राप्त कर सकते हैं जैसे:

Environment.UserDomainName.Dump();
Environment.MachineName.Dump();
Environment.UserName.Dump();
Environment.CurrentDirectory.Dump();
Environment.SystemDirectory.Dump();

NB प्राप्त करने के लिए Domain\UserNameमैं इसके System.Security.Principal.WindowsIdentity.GetCurrent().Name
बजाय का उपयोग करेगा Environment.UserDomainName+@"\"+Environment.UserName


Util.WriteCsv

( नया: LinqPad संस्करण v4.45.05 (बीटा) के बाद से उपलब्ध )

Util.WriteCsv (Customers, @"c:\temp\customers.csv");

यह तालिका की सामग्री Customersको CSV फ़ाइल में लिख देगा c:\temp\customers.csv। आप एक अच्छा उदाहरण भी पा सकते हैं कि कैसे उपयोग करें Util.WriteCsvऔर फिर यहाँ Linqpad के परिणाम विंडो में CSV डेटा प्रदर्शित करें

संकेत:

  • CSV फ़ाइल प्राप्त करने / बनाने के लिए जो क्वेरी के समान निर्देशिका में है, आप इसका उपयोग कर सकते हैं:
    var csvFile=Util.CurrentQueryPath.Replace(".linq", ".csv");

  • यदि तालिका बड़ी है, ObjectTrackingEnabled = false;तो मेमोरी में कैशिंग से बचने के लिए CSV लिखने से पहले उपयोग करें।

  • यदि आप अल्पविराम से अलग फ़ाइल के बजाय XML प्रारूप में एक तालिका का उत्पादन करना चाहते हैं , तो आप इसे कर सकते हैं:

    var xmlFile=Util.CurrentQueryPath.Replace(".linq", ".xml");
    var xml = XElement.Load(xmlFile);
    var query =
      from e in xml.Elements()
      where e.Attribute("attr1").Value == "a"
      select e;
    query.Dump();

    यह उदाहरण उन सभी तत्वों को लौटाता है जिनमें विशेषता attr1होती है जिसमें "a"XML फ़ाइल से मान होता है जिसका नाम क्वेरी के समान होता है और उसी पथ में समाहित होता है। की जाँच करें इस अधिक कोड नमूने के लिए लिंक।


Util.GetPassword

var pwd = Util.GetPassword("UserXY");

यह LinqPad के पासवर्ड मैनेजर में निर्मित पासवर्ड को पुनः प्राप्त करेगा। पासवर्ड बनाने और बदलने के लिए, LinqPad के "फाइल" मेनू में "पासवर्ड मैनेजर" मेनू आइटम खोलें। यदि आप C # कोड चलाते समय कोई पासवर्ड सेव नहीं करते हैं, तो पासवर्ड डायलॉग आपसे पासवर्ड पूछेगा और पासवर्ड सेव चेकबॉक्स (उदाहरण में, पासवर्ड) चेक करके इसे फ्लाई पर बनाकर सेव करने का विकल्प है। "UserXY" के लिए सहेजा जाएगा, और बाद में आप पासवर्ड प्रबंधक में यह प्रविष्टि पा सकते हैं )।

लाभ यह है कि आप विंडोज, यूजर प्रोफाइल में सुरक्षित रूप से, अलग-अलग और एन्क्रिप्ट किए गए लाइनक्लिप्स में पासवर्ड स्टोर कर सकते हैं (यह %localappdata%\LINQPad\Passwordsएक फ़ाइल के रूप में संग्रहीत है )। LinqPad पासवर्ड की सुरक्षा के लिए Windows DPAPI का उपयोग करता है।

इसके अलावा, पासवर्ड केंद्रीय रूप से संग्रहीत किया जाता है, इसलिए यदि आपको इसे बदलने की आवश्यकता है, तो आप इसे मेनू में कर सकते हैं और यह तुरंत आपके द्वारा बनाई गई सभी लिपियों पर लागू होता है।

टिप्पणियाँ:

  • यदि आप पासवर्ड नहीं सहेजना चाहते हैं और केवल पासवर्ड डायलॉग लाना चाहते हैं, तो आप निम्न पैरामीटर को निम्नानुसार उपयोग कर सकते हैं:
    var pwd = Util.GetPassword("UserXY", true);
    यह पासवर्ड डायलॉग में सेव पासवर्ड चेकबॉक्स को अनचेक कर देगा (हालांकि, उपयोगकर्ता अभी भी इसे चेक करने में सक्षम है और वैसे भी बचाने के लिए चुनते हैं)।

  • यदि आपको पासवर्ड को संग्रहीत करने की आवश्यकता है SecureString, तो आप इस सहायक फ़ंक्शन का उपयोग कर सकते हैं (nb: एक्सटेंशन विधि का .ToSecureString()उपयोग करने के लिए, कृपया Stackoverflow पर इस लिंक का पालन करें - यह आपको ज़रूरत पड़ने पर इसे वापस बदलने की अनुमति भी देता है):
    System.Security.SecureString GetPasswordSecure(string Name, bool noDefaultSave=true)
    {
      return Util.GetPassword(Name, noDefaultSave).ToSecureString();
    }


Util.Cmd

यह तरीका कमांड प्रोसेसर की तरह काम करता है। आप विंडोज कंसोल से आपके द्वारा जाने जाने वाले सभी आदेशों को लागू कर सकते हैं।

उदाहरण 1 - dir:

Util.Cmd(@"dir C:\");

यह निर्देशिका के परिणाम को उसकी आवश्यकता के बिना आउटपुट करेगा .Dump। इसे एक चर में संग्रहीत करने से यह फायदा होता है कि आप इस पर आगे Linq प्रश्नों का उपयोग कर सकते हैं। उदाहरण के लिए:

var path=@"C:\windows\system32"; 
var dirSwitch="/s/b";
var x=Util.Cmd(String.Format(@"dir ""{0}"" {1}", path, dirSwitch), true);
var q=from d in x 
        where d.Contains(".exe") || d.Contains(".dll")              
        orderby d
    select d;
q.Dump();

यह सभी फाइलों को फाइल एक्सटेंशन ".exe" या ".dll" में सम्‍मिलित करेगा C:\windows\system32/sस्विच सभी सबडायरेक्टरियों recurse लिए किया जाता है और /bनंगे उत्पादन प्रारूप के लिए प्रयोग किया जाता है। ध्यान दें कि Cmd विधि का दूसरा पैरामीटर डंप विधि का उपयोग करके केवल फ़िल्टर किए गए परिणाम को दिखाने के लिए कंसोल आउटपुट को दबाने के लिए निर्दिष्ट किया गया है।

आप देख सकते हैं कि यह आपके पास मौजूद वाइल्डकार्ड की तुलना में अधिक लचीला है, dirक्योंकि आप Linq के क्वेरी इंजन के पूर्ण लचीलेपन का उपयोग कर सकते हैं।

उदाहरण 2 - पाठ संपादक:

आप इस तरह नोटपैड में एक फ़ाइल खोल सकते हैं:

var filePath=@"C:\HelloWorld.txt";
Util.Cmd(@"%systemroot%\system32\notepad.exe", filePath);

Util.Image

एक URL से चित्र प्रदर्शित करता है। उदाहरण:

var url = "http://chart.apis.google.com/chart?cht=p3&chd=s:Uf9a&chs=350x140&chl=January|February|March|April";
Util.Image(url).Dump();

Util.ProgressBar, Util.Progress

उपयोग Util.ProgressBarकरने से आप एक प्रगति बार प्रदर्शित कर सकते हैं। आप निम्न सहायक वर्ग का उपयोग कर सकते हैं:

public class ProgressBar
{
    Util.ProgressBar prog;

    public ProgressBar() 
    { 
        Init("Processing"); 
    }

    private void Init(string msg)
    {
        prog = new Util.ProgressBar (msg).Dump();
        prog.Percent=0;
    }

    public void Update(int percent)
    {
        Update(percent, null);
    }   

    public void Update(int percent, string msg)
    {
        prog.Percent=percent;
        if (String.IsNullOrEmpty(msg))
        {
            if (percent>99) prog.Caption="Done.";
        }
        else
        {
            prog.Caption=msg;
        }
    }
}

बस इसे निम्न उदाहरण शो के रूप में उपयोग करें:

void Main()
{
    var pb1= new ProgressBar();
    Thread.Sleep(50);
    pb1.Update(50, "Doing something"); Thread.Sleep(550);
    pb1.Update(100); Thread.Sleep(50);
}

आप वैकल्पिक रूप Util.Progressसे LinqPads एकीकृत प्रगति पट्टी को अद्यतन करने के लिए उपयोग कर सकते हैं , उदाहरण के लिए:

Util.Progress = 25; // 25 percent complete

अंतर यह है कि यह परिणाम विंडो में प्रदर्शित नहीं होगा, और आप इसे संदेश नहीं दे सकते।


Util.RawHtml

आउटपुट विंडो में HTML प्रदर्शित करता है। उदाहरण:

Util.RawHtml (new XElement ("h1", "This is a big heading")).Dump();

हाइपरलिंक, Util। क्षैतिज क्षैतिज

आप इस उदाहरण फ़ंक्शन का उपयोग कर सकते हैं

public void ShowUrl(string strURL, string Title)
{
    Action showURL = delegate() { Process.Start("iexplore.exe", strURL); };
    var url = new Hyperlinq(showURL, "this link", true);
    Util.HorizontalRun (true, "Click ", url, " for details.").Dump(Title);
}

परिणाम विंडो में हाइपरलिंक दिखाने के लिए - या अपने पसंदीदा संपादक को खोलने जैसी कोई क्रिया। उपयोग:

ShowUrl("http://stackoverflow.com", "Check out StackOverflow");

ध्यान दें कि यह फ़ंक्शन हमेशा काम करता है, जबकि new Hyperlinq ("http://myURL", "Web site").Dump();कुछ प्रकार के URL के लिए काम नहीं करता है (विशेष रूप से, यदि आपको URL के भाग के रूप में ": 1234" जैसे पोर्ट नाम पास करने हैं)।


Util.ReadLine

कंसोल से इनपुट पढ़ता है। उदाहरण:

int age = Util.ReadLine<int> ("Enter your age");

के लिए एक पर्याय के रूप में Util.ReadLine<string>(), आप भी उपयोग कर सकते हैं Console.ReadLine()

लेकिन और भी है! आप निम्न स्निपेट के साथ एक साधारण JSON पार्सर बना सकते हैं - उदाहरण के लिए, यदि आप पार्स करना चाहते हैं और मक्खी पर JSON स्ट्रिंग का परीक्षण करना चाहते हैं, तो यह बहुत उपयोगी है। निम्नलिखित स्निपेट को एक टेक्स्ट एडिटर का उपयोग करके JSONAnalyzer.linq के रूप में सहेजें और फिर इसे LinqPad में खोलें (यह मक्खी पर आसानी से संदर्भ जोड़ने के लिए है):

<Query Kind="Program">
    <Reference>&lt;RuntimeDirectory&gt;\System.Web.Extensions.dll</Reference>
    <Namespace>System.Web.Script.Serialization</Namespace>
</Query>

void Main()
{
    var jsonData=Util.ReadLine<string>("Enter JSON string:");
    var jsonAsObject = new JavaScriptSerializer().Deserialize<object>(jsonData);
    jsonAsObject.Dump("Deserialized JSON");
}

अब आप इसे चला सकते हैं और क्लिपबोर्ड से एक JSON स्ट्रिंग को कंसोल में पेस्ट कर सकते हैं - यह Dumpफ़ंक्शन को अच्छी तरह से एक वस्तु के रूप में प्रदर्शित करने के लिए उपयोग करेगा - और आपको मुद्दों को ठीक करने के लिए स्क्रीन पर पार्सर के त्रुटि संदेश भी मिलते हैं। AJAX डिबगिंग के लिए बहुत उपयोगी है।

JSON


Util.ClearResults

यदि आपको अपनी स्क्रिप्ट के अंदर परिणाम विंडो साफ़ करने की आवश्यकता है, तो उपयोग करें:

Util.ClearResults();

या तो इसे अपनी स्क्रिप्ट के शीर्ष पर उपयोग करें, या - यदि आप किसी स्क्रिप्ट में कई क्वेरीज़ चला रहे हैं - तो आपको स्क्रीन को खाली करने से पहले उपयोगकर्ता इनपुट की प्रतीक्षा करनी चाहिए (जैसे इसके साथ पूर्ववर्ती द्वारा Util.ReadLine)।


कस्टम। डम्प () - ICustomMemberProvider

यह भी दिलचस्प है, कि आप .Dump()विधि का आउटपुट बदल सकते हैं । बस इंटरफ़ेस को लागू करें ICustomMemberProvider, जैसे

public class test : ICustomMemberProvider 
{

      IEnumerable<string> ICustomMemberProvider.GetNames() {
        return new List<string>{"Hint", "constMember1", "constMember2", "myprop"};
      }

      IEnumerable<Type> ICustomMemberProvider.GetTypes() 
      {
        return new List<Type>{typeof(string), typeof(string[]), 
            typeof(string), typeof(string)};
      }

      IEnumerable<object> ICustomMemberProvider.GetValues() 
      {
        return new List<object>{
        "This class contains custom properties for .Dump()", 
        new string[]{"A", "B", "C"}, "blabla", abc};
      }

      public string abc = "Hello1"; // abc is shown as "myprop"
      public string xyz = "Hello2"; // xyz is entirely hidden
}

यदि आप इस वर्ग का एक उदाहरण बनाते हैं, जैसे

var obj1 = new test();
obj1.Dump("Test");

तो यह होगा उत्पादन केवल Hint, constMember1, constMember2, और mypropनहीं, बल्कि संपत्ति xyz:

लिनकैप डंप


LinqPad में एक MessageBox या InputBox प्रदर्शित करना

यदि आपको एक संदेश बॉक्स प्रदर्शित करने की आवश्यकता है, तो यहां देखें कि यह कैसे करना है।

उदाहरण के लिए, आप निम्न कोड का उपयोग करके एक इनपुटबॉक्स प्रदर्शित कर सकते हैं

void Main()
{
    string inputValue="John Doe"; 
    inputValue=Interaction.InputBox("Enter user name", "Query", inputValue);
    if (!string.IsNullOrEmpty(inputValue)) // not cancelled and value entered
    {
        inputValue.Dump("You have entered;"); // either display it in results window
        Interaction.MsgBox(inputValue, MsgBoxStyle.OkOnly, "Result"); // or as MsgBox
    }
}

(इस काम को करने के लिए F4 दबाएँ और Microsoft.VisualBasic.dll और इसके नामस्थानों को जोड़ना न भूलें)


Util.Run

( नया: LinqPad संस्करण v4.52.1 (बीटा) के बाद से उपलब्ध )

आपको अपनी स्क्रिप्ट के भीतर या अपने स्वयं के .NET प्रोग्राम या विंडोज सेवा (LINQPad4-AnyCPU संस्करण को संदर्भित करके LINQPad.exe) के भीतर से एक और LINQPad स्क्रिप्ट चलाने की अनुमति देता है । यह स्क्रिप्ट को निष्पादित करता है जैसे कमांड लाइन टूल lprun.exeइसे करेगा।

उदाहरण:

const string path=@"C:\myScripts\LinqPad\";
var dummy=new LINQPad.QueryResultFormat(); // needed to call Util.Run
Util.Run(path+"foo.linq", dummy);

यह उदाहरण स्क्रिप्ट चलाता है foo.linq, जिसमें निम्न नमूना कोड होता है:

void Main(string[] args)
{
    #if CMD
       "I'm been called from lprun! (command line)".Dump();
    #else
       "I'm running in the LINQPad GUI!".Dump();
       args = new[] { "testhost", "test@foo.com", "test@foo.com", "Test Subject" };
    #endif
    args.Dump("Args");
}

यह आपको यह जांचने की अनुमति देता है कि लिपिपैड जीयूआई के अंदर से या इसके माध्यम से स्क्रिप्ट को चलाया गया lprun.exeया नहीं Util.Run

नोट: आह्वान के निम्नलिखित प्रकार सहायक हो सकते हैं:

Util.Run(path+"foo.linq", dummy).Dump(); // obviously dumps the script output!
Util.Run(path+"foo.linq", dummy).Save(path+"foo.log"); // writes output into log
Util.Run(path+"foo.linq", dummy).SaveAsync(path+"foo1.log");     // async output log

SubmitChanges () - Linq To SQL

यदि आप LinqToSQL का उपयोग कर रहे हैं , तो आप परिवर्तनों को स्थायी ( सम्मिलित / अद्यतन / हटाने के संचालन के लिए) करना चाहते हैं। चूंकि डेटाबेस संदर्भ स्पष्ट रूप से LinqPad द्वारा बनाया गया है, इसलिए आपको SubmitChanges()नीचे दिखाए गए अनुसार प्रत्येक परिवर्तन के बाद कॉल करना होगा ।

(LinqPad-) नॉर्थविंड डेटाबेस के लिए उदाहरण :

सम्मिलित करें

var newP = new Products() { ProductID=pID, CategoryID=cID, 
            ProductName="Salmon#"+pID.ToString() };
Products.InsertOnSubmit(newP);
SubmitChanges();    

अपडेट करें

var prod=(from p in Products
            where p.ProductName.Contains("Salmon")
            select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
SubmitChanges(); 

हटाएं

var itemsToDelete=Products.Where(p=> p.ProductName.Contains("Salmon") ||
    p.ProductName.Contains("Trout"));
foreach(var item in itemsToDelete) { Products.DeleteOnSubmit(item); }
SubmitChanges();

नोट: पिछले उदाहरणों के लिए वैध आईडी प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

var cID = (from c in Categories 
            where c.CategoryName.Contains("Seafood") 
            select c).FirstOrDefault().CategoryID;

var pID = Products.Count()+1;

इससे पहले कि आप उन्हें आह्वान करें।


SaveChanges () - एंटिटी फ्रेमवर्क

यदि आप एंटिटी फ्रेमवर्क का उपयोग कर रहे हैं , तो आप बदलावों को स्थायी रूप से ( सम्मिलित / अद्यतन / हटाए गए संचालन के लिए) करना चाह सकते हैं । चूंकि डेटाबेस संदर्भ स्पष्ट रूप से LinqPad द्वारा बनाया गया है, इसलिए आपको SaveChanges()नीचे दिखाए गए अनुसार प्रत्येक परिवर्तन के बाद कॉल करना होगा ।

उदाहरण मूल रूप से LinqToSQL के लिए पहले जैसे ही हैं , लेकिन आपको SaveChanges()इसके बजाय उपयोग करने की आवश्यकता है , और तरीकों को सम्मिलित करने और हटाने के लिए भी बदल गया है।

सम्मिलित करें

var newP = new Products() { ProductID=pID, CategoryID=cID, 
            ProductName="Salmon#"+pID.ToString() };
Products.Add(newP);
SaveChanges();  

अपडेट करें

var prod=(from p in Products
            where p.ProductName.Contains("Salmon")
            select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
SaveChanges(); 

हटाएं

var itemsToDelete=Products.Where(p=> p.ProductName.Contains("Salmon") ||
    p.ProductName.Contains("Trout"));
foreach(var item in itemsToDelete) { Products.Remove(item); }
SaveChanges();

नोट: पिछले उदाहरणों के लिए वैध आईडी प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

var cID = (from c in Categories 
            where c.CategoryName.Contains("Seafood") 
            select c).FirstOrDefault().CategoryID;

var pID = Products.Count()+1;

इससे पहले कि आप उन्हें आह्वान करें।


यह - डेटाबेस संदर्भ

LinqPad में , शीर्ष पर कॉम्बोक्स का उपयोग करके और आपकी क्वेरी के लिए सही डेटाबेस चुनकर डेटाबेस संदर्भ स्वचालित रूप से लागू होता है। लेकिन कभी-कभी, इसे स्पष्ट रूप से संदर्भित करना उपयोगी होता है, उदाहरण के लिए यदि आप अपने प्रोजेक्ट के कुछ कोड को विजुअल स्टूडियो से बाहर कॉपी करते हैं, और इसे LinqPad में पेस्ट करते हैं।

विज़ुअल स्टूडियो प्रोजेक्ट से लिया गया आपका कोड स्निपेट इस तरह दिखता है:

var prod=(from p in dc.Products
            where p.ProductName.Contains("Salmon")
            select p).FirstOrDefault();
prod.ProductName="Trout#"+prod.ProductID.ToString();
dc.SaveChanges(); 

अब इसका क्या किया जाए dc? बेशक, आप dc.अपनी क्वेरी में प्रत्येक घटना को हटा सकते हैं , लेकिन यह बहुत आसान है। बस जोड़ दो

var dc=this; // UserQuery

अपने स्निपेट के शीर्ष पर जैसे:

void Main()
{
    var dc=this;
    var prod=(from p in dc.Products
                where p.ProductName.Contains("Salmon")
                select p).FirstOrDefault();
    prod.ProductName="Trout#"+prod.ProductID.ToString();
    dc.SaveChanges(); 
}   

और कोड तुरंत काम करेगा!


this.Connection

ओलेडब के साथ लाइनपैड का उपयोग करना, लाइनक ऑब्जेक्ट के लिए एक डिटैटेबल को परिवर्तित करना, लिनक में एसक्यूएल क्वेरी

निम्नलिखित कोड स्निपेट आपको ओलेडबी के साथ लिनकपैड का उपयोग करने में मदद करता है। जोड़े System.Data.OleDbसे System.Dataविधानसभा क्वेरी गुण है, तो में निम्न कोड पेस्ट Main():

var connStr="Provider=SQLOLEDB.1;"+this.Connection.ConnectionString; 

OleDbConnection conn = new OleDbConnection(connStr);
DataSet myDS = new DataSet();
conn.Open();

string sql = @"SELECT * from Customers";
OleDbDataAdapter adpt = new OleDbDataAdapter();
adpt.SelectCommand = new OleDbCommand(sql, conn); 
adpt.Fill(myDS);

myDS.Dump();

अब LinqPad में एक SqlServer कनेक्शन जोड़ें और इस उदाहरण को चलाने के लिए नॉर्थविंड डेटाबेस जोड़ें।

NB: यदि आप वर्तमान में चयनित कनेक्शन का डेटाबेस और सर्वर प्राप्त करना चाहते हैं, तो आप इस कोड का उपयोग कर सकते हैं स्निपेट:

void Main()
{
    var dc=this;
    var tgtSrv=dc.Connection.DataSource;
    var tgtDb=dc.Connection.ConnectionString.Split(';').Select(s=>s.Trim())
        .Where(x=>x.StartsWith("initial catalog", StringComparison.InvariantCultureIgnoreCase))
        .ToArray()[0].Split('=')[1];
    tgtSrv.Dump();
    tgtDb.Dump();
}

तुम भी LinqmyDS में परिवर्तित कर सकते हैं , निम्नलिखित सवाल के जवाब यह कैसे करना है: Linq के साथ .NET 4 गतिशील कीवर्ड का उपयोग करने के अच्छे उदाहरण

एक और उदाहरण: मान लीजिए कि आपका DBA आपको SQL क्वेरी देता है और आप LinqPad में परिणामों का विश्लेषण करना चाहते हैं - बेशक Linq में, SQL में नहीं। तो आप निम्नलिखित कर सकते हैं:

void Main()
{
    var dc=this;

    // do the SQL query
    var cmd =
        "SELECT Orders.OrderID, Orders.CustomerID, Customers.CompanyName,"
        +"       Customers.Address, Customers.City"
        +" FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID";
    var results = dc.ExecuteQuery<OrderResult>(cmd);

    // just get the cities back, ordered ascending
    results.Select(x=>x.City).Distinct().OrderBy(x=>x).Dump();
}

class OrderResult
{   // put here all the fields you're returning from the SELECT
    public dynamic OrderID=null; 
    public dynamic CustomerID=null;
    public dynamic CompanyName=null;
    public dynamic Address=null;
    public dynamic City=null;
}

इस उदाहरण में DBA की SELECT क्वेरी सिर्फ "कमांड टेक्स्ट" में डाली गई है, और परिणाम सिटी द्वारा फ़िल्टर और ऑर्डर किए गए हैं।
बेशक, यह एक सरल उदाहरण है, आपका डीबीए शायद आपको अधिक जटिल स्क्रिप्ट देगा, लेकिन आपको यह विचार मिल रहा है: बस एक सहायक परिणाम वर्ग जोड़ें, जिसमें सेलेक्ट क्लॉज से सभी फ़ील्ड शामिल हों और फिर आप सीधे इसका उपयोग कर सकते हैं ।
तुम भी इस तरह एक संग्रहीत कार्यविधि से परिणाम ले सकते हैं और Linq में इसका उपयोग कर सकते हैं। जैसा कि आप देख सकते हैं, इस उदाहरण में मैं डेटा प्रकार के बारे में परवाह नहीं करता हूं और dynamicइसे व्यक्त करने के लिए उपयोग करता हूं ।
तो यह वास्तव में रैपिड प्रोग्रामिंग के बारे में है जो डेटा का तेज़ी से विश्लेषण करने में सक्षम है। आपको विभिन्न कारणों से अपने वास्तविक आवेदन में ऐसा नहीं करना चाहिए (एसक्यूएल इंजेक्शन, क्योंकि आप शुरुआत से ही ईएफ का उपयोग कर सकते हैं)।


PanelManager

LinqPad में ग्राफिक ड्रा, भाग 1

नीचे दिए गए उदाहरणों का उपयोग करने के लिए, प्रेस F4और जोड़ने System.Windows.dll, System.Windows.Forms.dll, WindowsFormsIntegration.dll, PresentationCore.dllऔर PresentationFramework.dllअपने LINQPad कार्यक्रम के लिए और भी नाम स्थान जोड़ने System.Windows.Shapes

1 उदाहरण के लिए बस एक लाइन खींचता है:

var myLine = new Line();
myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue;
myLine.X1 = 1; myLine.X2 = 50;
myLine.Y1 = 1; myLine.Y2 = 50;
myLine.StrokeThickness = 2;
PanelManager.DisplayWpfElement(myLine, "Graphic");

2 उदाहरण से पता चलता है कि कैसे आप PanelManager का उपयोग करके LINQPad में ग्राफिक प्रदर्शित कर सकते हैं। आम तौर पर LinqPad केवल Wpf वस्तुओं का समर्थन करता है। इस उदाहरण का उपयोग करता है System.Windows.Forms.Integration.WindowsFormsHostएक बनाने के लिए Windows.Forms.PictureBoxउपलब्ध है (यह से प्रेरित था इस ):

// needs (F4): System.Windows.dll, System.Windows.Forms.dll, 
// WindowsFormsIntegration.dll, PresentationCore.dll, PresentationFramework.dll 
void Main()
{       
    var wfHost1 = new System.Windows.Forms.Integration.WindowsFormsHost();
    wfHost1.Height=175; wfHost1.Width=175; wfHost1.Name="Picturebox1";
    wfHost1.HorizontalAlignment=System.Windows.HorizontalAlignment.Left;
    wfHost1.VerticalAlignment=System.Windows.VerticalAlignment.Top;
    System.Windows.Forms.PictureBox pBox1 = new System.Windows.Forms.PictureBox();
    wfHost1.Child = pBox1;
    pBox1.Paint += new System.Windows.Forms.PaintEventHandler(picturebox1_Paint);
    PanelManager.StackWpfElement(wfHost1, "Picture");
} 

public string pathImg
{
    get { return System.IO.Path.Combine(@"C:\Users\Public\Pictures\Sample Pictures\", 
            "Tulips.jpg"); } 
}

// Define other methods and classes here
public void picturebox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    // https://stackoverflow.com/a/14143574/1016343
    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(pathImg);
    System.Drawing.Point ulPoint = new System.Drawing.Point(0, 0);
    e.Graphics.DrawImage(bmp, ulPoint.X, ulPoint.Y, 175, 175);
}

इससे निम्नलिखित ग्राफिक (पैनल आइटम "ग्राफिक" और "चित्र" ऊपर दिए गए उदाहरणों द्वारा जोड़े जाएंगे):

Showing_Graphic_in_LinqPad

यदि आप नॉर्थविंड डेटाबेस से छवियों को प्रदर्शित करना चाहते हैं , तो आप निम्न कार्य कर सकते हैं:
छवि फ़ाइल नाम को "नॉर्थविंडपिक्स.जेपीजीपी" में बदलें, फिर दूसरे उदाहरण के मुख्य () विधि की शुरुआत में निम्न कोड जोड़ें :

var img = (from e in this.Employees select e).FirstOrDefault().Photo.ToArray();
using (FileStream fs1 = new FileStream(pathImg, FileMode.Create))
{
    const int offset=78;
    fs1.Write(img, offset, img.Length-offset);
    fs1.Close();
}

यह कर्मचारी तालिका से पहला रिकॉर्ड पढ़ेगा और चित्र प्रदर्शित करेगा।

अधिक जानने के लिए निम्न लिंक देखें:
WPF LinqPad कस्टम विज़ुअलाइज़र में आकृतियाँ और मूल आरेखण

नोट: आप पैनलमैनगर के बिना भी इसे प्राप्त कर सकते हैं, साथ ही निम्न उदाहरण, जिसे मैंने यहां दिखाया था:

// using System.Drawing;
using (var image=new Bitmap(100, 100))
using (var gr = Graphics.FromImage(image))
{
    gr.FillRectangle(Brushes.Gold, 0, 0, 100, 100);
    gr.DrawEllipse(Pens.Blue, 5, 5, 90, 90);
    gr.Save();
    image.Dump();
}

इसे .Dump()प्रदर्शित करने के लिए यह कमांड का उपयोग कर रहा है। आप image.Dump()कई बार आह्वान कर सकते हैं और यह छवि को बढ़ा देगा।


विंडोज फॉर्म

LinqPad में ग्राफिक ड्रा, भाग 2

इस पोस्ट से प्रेरित निम्नलिखित उदाहरण दिखा रहा है कि लिनक्पैड 5 में एक सरल फ़ंक्शन प्लॉटर को C # 7 का उपयोग करके कैसे लागू किया जाए:

void Main()
{
    fnPlotter(x1: -1, x2: 1, fn: (double x) => Math.Pow(x, 3)).Dump();
}

public static Bitmap fnPlotter(double x1=-3, double x2=3, double s=0.05, 
                                   double? ymin=null, double? ymax=null, 
                                   Func<double, double> fn = null, bool enable3D=true)
{
    ymin = ymin ?? x1; ymax = ymax ?? x2;

    dynamic fArrPair(double p_x1 = -3, double p_x2 = 3, double p_s = 0.01, 
                          Func<double, double> p_fn = null)
    {
        if (p_fn == null) p_fn = ((xf) => { return xf; }); // identity as default
        var xl = new List<double>(); var yl = new List<double>();
        for (var x = p_x1; x <= p_x2; x += p_s)
        {
            double? f = null;
            try { f = p_fn(x); }
            finally
            {
                if (f.HasValue) { xl.Add(x); yl.Add(f.Value); }
            }
        }
        return new { Xs = xl.ToArray(), Ys = yl.ToArray() };
    }

    var chrt = new Chart(); var ca = new ChartArea(); chrt.ChartAreas.Add(ca);
    ca.Area3DStyle.Enable3D = enable3D;
    ca.AxisX.Minimum = x1; ca.AxisX.Maximum = x2;   
    ca.AxisY.Minimum = ymin.Value; ca.AxisY.Maximum = ymax.Value;

    var sr = new Series(); chrt.Series.Add(sr);
    sr.ChartType = SeriesChartType.Spline; sr.Color = Color.Red;
    sr.MarkerColor = Color.Blue; sr.MarkerStyle = MarkerStyle.Circle;
    sr.MarkerSize = 2;

    var data = fArrPair(x1, x2, s, fn); sr.Points.DataBindXY(data.Xs, data.Ys); 
    var bm = new Bitmap(width: chrt.Width, height: chrt.Height);
    chrt.DrawToBitmap(bm, chrt.Bounds); return bm;
}

यह परिणाम पैनल में विंडोज फॉर्म प्रदर्शित करने के लिए LinqPad की क्षमता का उपयोग कर रहा है। जोड़े संदर्भ (प्रेस ) : , , और इन विधानसभाओं से सभी नामस्थान जोड़ें।
उदाहरण
F4
System.Drawing.dllSystem.Windows.Forms.dllSystem.Windows.Forms.DataVisualization.dll


अतिरिक्त संकेत / आगे पढ़ने:

  • Visual Studio में LinqPad का उपयोग करना चाहते हैं ? यहां बताया गया है कि आप ऐसा कैसे कर सकते हैं

  • LinqPad को "पोर्टेबल ऐप" के रूप में होना चाहिए ? यहाँ पढ़ें कि कैसे करना है।

  • LinqPad के लिए जो की वेबसाइट हमेशा एक उत्कृष्ट स्रोत है। LinqPad के अंदर, Help -> What's Newआपको नए कार्यों और विधियों के बारे में संकेत देता है। LINQPad फोरम भी सहायक संकेत दिए हैं।

  • इसके अलावा बहुत मददगार: Linq (पैड) डीबगिंग के बारे में यह लेख।

  • अपने बैच स्क्रिप्ट में LINQ क्वेरी चलाने केlprun.exe लिए उपयोग करें अधिक जानकारी के लिए इस लेख को पढ़ें । उदाहरण के लिए: इस उदाहरण में, क्वेरी एक साधारण LINQ अभिव्यक्ति है। बेशक, आप प्रोग्राम मोड को सक्रिय करने के लिए जटिल प्रश्नों को तैयार कर सकते हैं ।
    echo Customers.Take(100) > script.txt
    lprun -lang=e -cxname=CompanyServer.CustomerDb script.txt
    -lang=program

  • आप विस्तार के तरीके लिख सकते हैं और उन्हें स्टोर कर सकते हैं LinqPad के बाईं ओर मेरी क्वेरी टैब : पेड़ के अंतिम आइटम को मेरा एक्सटेंशन नाम दिया गया है ; एक फ़ाइल खोलने के लिए उस पर डबल क्लिक करें, जहां आप अपने सभी प्रश्नों के लिए उपलब्ध एक्सटेंशन लिख सकते हैं। बस उन्हें सार्वजनिक स्थैतिक वर्ग में रखें MyExtensions, और Main()अपने एक्सटेंशन के लिए परीक्षण शामिल करने के लिए विधि का उपयोग करें।


2
Util.ReadLine <string> ("कुछ जोंस दर्ज करें") के बारे में टिप से प्यार करें; पहले मैं इसे फाइल में कॉपी करता था और फिर वहीं से पढ़ता था ... मुझे यह टिप बहुत पसंद है। धन्यवाद!
loneshark99

2

डंप एक वैश्विक विस्तार विधि है और SubmitChanges DataContext ऑब्जेक्ट से आता है जो एक System.Data.Linq.DataContext ऑब्जेक्ट है।

एलपी केवल डंप और जुदा जोड़ता है जहां तक ​​मुझे पता है। हालाँकि मैं अत्यधिक रिफ्लेक्टर में इसे देखने की सलाह दूंगा कि इसमें और क्या-क्या इस्तेमाल किया जा सकता है। अधिक दिलचस्प चीजों में से एक LINQPad.Util नेमस्पेस है, जिसमें आंतरिक रूप से LINQPad द्वारा उपयोग किए जाने वाले कुछ उपहार हैं।


नोट: LinqPad के नए संस्करणों में: .Dump()स्रोत संपादक में किसी अन्य विधि पर क्लिक करें या "प्रतिबिंबित" करने के लिए F12 दबाएँ । यह अब टूल में बनाया गया है!
मैट

1

मेरे पिछले उत्तर में StackOverflow पाठ की सीमा तक पहुँच गया , लेकिन अभी भी LinqPad में अधिक शांत एक्सटेंशन हैं। उनमें से एक जिसका मैं उल्लेख करना चाहता हूं:


जावास्क्रिप्ट कार्य (उपयोग .Dump())

LinqPad के 5.42 बीटा संस्करण के बाद से आप जावास्क्रिप्ट कार्यों को एम्बेड कर सकते हैं और उन्हें सीधे अपने सी # कोड से कॉल कर सकते हैं। हालाँकि इसकी कुछ सीमाएँ हैं (JSFiddle के साथ तुलना में), यह LinqPad में कुछ जावास्क्रिप्ट कोड का जल्दी परीक्षण करने का एक अच्छा तरीका है।

उदाहरण:

void Main()
{
    // JavaScript inside C#
    var literal = new LINQPad.Controls.Literal("script",
    @"function jsFoo(x) { 
        alert('jsFoo got parameter: ' + x); 
        var a = ['x', 'y', 'z']; external.log('Fetched \'' + a.pop() + '\' from Stack');
        external.log('message from C#: \'' + x + '\''); 
    }"); 
    // render & invoke
    literal.Dump().HtmlElement.InvokeScript(true, "jsFoo", "testparam");
}

इस उदाहरण में, jsFooएक पैरामीटर के साथ एक फ़ंक्शन तैयार किया जाता है और चर में संग्रहीत किया जाता है literal। फिर, यह .Dump().HtmlElement.InvokeScript(...)पैरामीटर पारित करके प्रस्तुत किया और बुलाया जाता है testparam

जावास्क्रिप्ट फ़ंक्शन external.Log(...)LinqPad की आउटपुट विंडो में टेक्स्ट को आउटपुट करने के लिए उपयोग करता है, औरalert(...) करने पॉपअप संदेश प्रदर्शित करने के ।

आप निम्न विस्तार वर्ग / विधियों को जोड़कर इसे सरल बना सकते हैं :

public static class ScriptExtension
{
    public static object RunJavaScript(this LINQPad.Controls.Literal literal, 
                                       string jsFunction, params object[] p)
    {
        return literal.Dump().HtmlElement.InvokeScript(true, jsFunction, p);
    }
    
    public static LINQPad.Controls.Literal CreateJavaScript(string jsFunction)
    {
        return new LINQPad.Controls.Literal("script", jsFunction);
    }
}

फिर आप पिछले उदाहरण को निम्नानुसार कॉल कर सकते हैं:

    // JavaScript inside C#
    var literal = ScriptExtension.CreateJavaScript(
    @"function jsFoo(x) { 
        alert('jsFoo got parameter: ' + x); 
        var a = ['x', 'y', 'z']; external.log('Fetched \'' + a.pop() + '\' from Stack');
        external.log('message from C#: \'' + x + '\''); 
    }"); 

    // render & invoke
    literal.RunJavaScript("jsFoo", "testparam");

इसका एक ही प्रभाव है, लेकिन पढ़ने में आसान है (यदि आप अधिक जावास्क्रिप्ट ;-) करने का इरादा रखते हैं)।

एक और विकल्प, यदि आपको लैम्ब्डा के भाव पसंद हैं और आप हर बार जब आप इसे कॉल कर रहे हैं तो स्ट्रिंग नाम के रूप में फ़ंक्शन नाम निर्दिष्ट करना पसंद नहीं करते हैं, आप यह कर सकते हैं:

var jsFoo = ScriptExtension.CreateJavaScript(
            @"function jsFoo(x) { ...  }"); 
ScriptExtension.RunJavaScript(() => jsFoo, "testparam");

बशर्ते आपने हेल्पर फंक्शन जोड़ा हो

public static object RunJavaScript(Expression<Func<LINQPad.Controls.Literal>> expr,  
                                   params object[] p)
{
    LINQPad.Controls.Literal exprValue = expr.Compile()();
    string jsFunction = ((MemberExpression)expr.Body).Member.Name;
    return exprValue.Dump().HtmlElement.InvokeScript(true, jsFunction, p);
}

वर्ग के लिए ScriptExtension। यह आपके द्वारा उपयोग किए जाने वाले चर नाम को हल करेगा (यहाँ jsFoo) जो कि जावास्क्रिप्ट फ़ंक्शन के समान ही होता है (ध्यान दें कि चर नाम को हल करने के लिए लैम्ब्डा अभिव्यक्ति का उपयोग कैसे किया जाता है, यह nameof(paramName)फ़ंक्शन के अंदर का उपयोग करके नहीं किया जा सकता है )।


.Dump () - एक मैसेज इनलाइन को अपडेट करना

कभी-कभी यह आपके द्वारा डंप किए गए पाठ को एक नई पंक्ति में डालने के बजाय इसे अधिलेखित करने के लिए उपयोगी होता है , उदाहरण के लिए यदि आप लंबे समय से चल रहे क्वेरी का प्रदर्शन कर रहे हैं और इसकी प्रगति आदि दिखाना चाहते हैं (नीचे प्रोग्रेसबार भी देखें)। यह एक का उपयोग करके किया जा सकता है DumpContainer, आप इसे नीचे दिखाए अनुसार उपयोग कर सकते हैं

उदाहरण 1:

void Main()
{
   var dc = new DumpContainer("Doing something ... ").Dump("Some Action");
   System.Threading.Thread.Sleep(3000); // wait 3 seconds
   dc.Content += "Done.";
}

DumpContainerAnimation

ध्यान दें कि कुछ और जटिल वस्तुओं के लिए, आपको dc.UpdateContent(obj);इसके बजाय उपयोग करना पड़ सकता है dc.Content=...

उदाहरण 2:

void Main()
{
    var dc = new DumpContainer().Dump("Some Action");
    for (int i = 10; i >= 0; i--)
    {
        dc.UpdateContent($"Countdown: {i}");
        System.Threading.Thread.Sleep(250);
    };
    dc.UpdateContent("Ready for take off!");
}

Util.ProgressBar

प्रोग्रेसबार का उपयोग करके प्रगति को दर्शाया जा सकता है:

उदाहरण:

void Main()
{
    var prog = new Util.ProgressBar("Processing").Dump();
    for (int i = 0; i < 101; i++)
    {
       Thread.Sleep(50); prog.Percent = i;
    }
    prog.Caption = "Done";
}

यह पहले डंप उदाहरण के समान है, लेकिन इस बार एक अच्छा प्रगति बार एनीमेशन दिखा रहा है।


LinqPad के साथ इकाई परीक्षण - xUnit

क्या आप जानते हैं कि आप LinqPad में यूनिट टेस्ट लिख सकते हैं? उदाहरण के लिए, आप xUnit ढांचे का उपयोग कर सकते हैं। यह LinqPad के NUGET सपोर्ट के जरिए F4- डायलॉग क्लिक में उपलब्ध है Add NUGET....। यहाँ एक चरण-दर-चरण विवरण दिया गया है कि LinqPad V5 या V6 के साथ xUnit का उपयोग कैसे करें।


अगर मुझे और पता चलता है, तो मैं इस उत्तर को अपडेट करूंगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.