2009-08-03 15 views
59

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

मैंने देखा कि डाउनलोड कार्रवाई में LINQ कार्रवाई नमूने, उदा। उदाहरण के 4.04, IntelliSense एक वर्ग "पुस्तकें" से पता चलता है, लेकिन मैं किसी भी संदर्भ या " का उपयोग कर" LINQPad उपकरण में बयान नहीं दिख रहा है, यहाँ नमूना है:

List<Book> books = new List<Book>() { 
    new Book { Title="LINQ in Action" }, 
    new Book { Title="LINQ for Fun" }, 
    new Book { Title="Extreme LINQ" } }; 

var titles = 
    books 
    .Where(book => book.Title.Contains("Action")) 
    .Select(book => book.Title); 

titles.Dump(); 

"LinqBooks.Common में, व्यापार वस्तुओं, Book.linq "जहां वर्ग में परिभाषित किया जा रहा है है: लेकिन

public class Book 
{ 
    public IEnumerable<Author> Authors {get; set;} 
    public String Isbn {get; set;} 
    public String Notes {get; set;} 
    public Int32 PageCount {get; set;} 
    public Decimal Price {get; set;} 
    public DateTime PublicationDate {get; set;} 
    public Publisher Publisher {get; set;} 
    public IEnumerable<Review> Reviews {get; set;} 
    public Subject Subject {get; set;} 
    public String Summary {get; set;} 
    public String Title {get; set;} 
    public String Test {get; set;} 

    public override String ToString() 
    { 
    return Title; 
    } 
} 

कैसे करता है यह काम इतना है कि मैं अपने वर्गों में कॉपी और LINQPad का उपयोग जल्दी से LINQ बयान है कि मैं यह कर सकते हैं का निर्माण कर सकते हैं फिर मेरे आवेदन में वापस कॉपी करें?

उत्तर

99

यदि आप LINQPad में कोड संपादक में राइट क्लिक करते हैं और उन्नत क्वेरी गुण चुनें, तो दो संवाद हैं: अतिरिक्त संदर्भ और अतिरिक्त नामस्थान आयात।

1) अतिरिक्त संदर्भ में, जोड़े उसके बाद ब्राउज़ और अपने कस्टम विधानसभा के लिए नेविगेट करें चुनें।

2) फिर, अतिरिक्त नामस्थान आयात में, नामस्थान आपको लगता है कि विधानसभा से आयात करना चाहते हैं।

<Query Kind="Statements"> <!-- kind: Program, ... ---> 
    <Connection>...</Connection> <!-- Optional, if you have connection to db --> 
    <Reference>[path]\[library]</Reference> <!-- references to your customized libraries --> 
    <Reference>RuntimeDirectory&gt;System.Data.dll</Reference> <!-- example to System.Data.dll --> 
    <Namespace>System.Data</Namespace> <!-- here are nodes for namespaces... --> 
    <Namespace>MyLibrary.Common</Namespace> 
</Query> 

var conn = "Data Source=..."; 
.... 

आदेश शब्दों में:

+0

यह "ब्राउज" बटन था जिसे मैं याद कर रहा था, धन्यवाद! –

10

LINQPad आप उन्नत क्वेरी गुण संवाद F4 दबाकर खोला जा सकता है, जिसके माध्यम से कस्टम विधानसभाओं संदर्भित करने के लिए अनुमति देता है।

+0

इसलिए मैंने अपनी कक्षाओं के साथ एक .dll बनाया जिसमें मैं क्वेरी करना चाहता हूं। मैं एफ 4 दबाता हूं और ** ** जोड़ें लेकिन मुझे इसे सूची में नहीं दिख रहा है। मैं अपने कस्टम .dll का संदर्भ कैसे करूं? –

+0

उसी संवाद में आपको उन नामस्थानों को दायरे में लाने के लिए _ अतिरिक्त नामस्थान आयात_ का उपयोग करने की आवश्यकता है। –

+0

लेकिन मेरे पास एक .dll है जिसे मैं LINQPad में एक्सेस करना चाहता हूं, उदा। "सी: \ temp \ SmartFormTest.dll", मैं उस पंक्ति को * अतिरिक्त नेमस्पेस आयातों में कॉपी करता हूं "लेकिन मैं इसका संदर्भ नहीं दे सकता और न ही यह सूची सूची में आता है। मैं कैसे संदर्भित कर सकता हूं ** सी: \ temp \ SmartFormTest .dll **? –

4

वास्तव में, यदि आप नोटपैड के साथ इस तरह के रूप में Book.linq LINQ फ़ाइल को देखो, आप फ़ाइल को नहीं देखेंगे एक्सएमएल का एक मिश्रण है और अंत में कोड का एक टुकड़ा है , उदाहरण के लिए linq फ़ाइलों से अधिक जानकारी प्राप्त हो सकती है कि LINQPad को सभी जानकारी कैसे मिलती है, एक गतिशील असेंबली बनाता है और इसे अपने यूआई पर परिणाम प्राप्त करने के लिए आंतरिक रूप से चलाता है।

वैसे, मैंने कल रात इस ब्लॉग के बारे में एक ब्लॉग लिखा और इसकी संरचना की मेरी समझ: LINQPad a .Net Snippet Code IDE

+0

एक्सएमएल और स्निप कोड का उदाहरण, ऊपर मेरी पोस्ट, Book.linq से नहीं हैं। यहां xml की संरचना का एक सामान्य उदाहरण है और कोड। –

2

एडवर्ड, हमने एक्शन नमूनों में LINQ बनाने के दौरान कई रणनीतियों का उपयोग किया। डेटाबेस अध्यायों में, हम अक्सर डेटाबेस तालिकाओं के आधार पर कक्षाओं को स्वत: उत्पन्न करने की LINQPad की क्षमता पर भरोसा करते हैं।

यदि आप यहां संदर्भित करते हैं (4.04) हमने एफ 4 का उपयोग कर प्री-कंपाइल क्लास लाइब्रेरी का संदर्भ जोड़ा है। हमने इस रणनीति का उन मामलों में उपयोग किया जहां लिंककैड ने विजुअल स्टूडियो द्वारा जेनरेट किए गए वर्गों से कक्षाओं को अलग किया और इस प्रकार संदर्भ को बदलने के संबंध में विशेष रूप से संदर्भ की तुलना में अलग-अलग व्यवहार करने का कारण बन गया।

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

कुछ नमूनों में, विशेष रूप से जहां हम कस्टम एक्सटेंशन विधियों का प्रदर्शन कर रहे हैं, हमें उत्पन्न किए गए संदर्भ वर्ग को समाप्त करने के लिए मजबूर करने की एक और चाल करना था (एक स्पष्ट रूप से बेजोड़ समापन} या अंत कक्षा जोड़ना) और फिर एक नई कक्षा शुरू करना, लेकिन इसके समापन अंत ब्रेस/एंड क्लास को छोड़कर। आप इसे डाउनलोड नमूने में 2.16 उदाहरण में देख सकते हैं।