2009-04-23 8 views
23

मैं वीबी.नेट के लिए काफी नया हूं और मुझे कुछ परेशानी हो रही है, जिसे मैंने सोचा था।मैं VB.NET और LINQ का उपयोग करके 'कहां' क्लॉज कैसे जोड़ूं?

इसे सरल रखना, मान लीजिए कि मेरे पास "नाम" के साथ एक दस्तावेज़ तालिका है जिसे मैं खोजना चाहता हूं (वास्तव में कई अन्य टेबल, जॉइन इत्यादि हैं ..)। । मैं एक where खंड में

उदाहरण स्ट्रिंग पारित मूल्यों पर आधारित का उपयोग कर क्वेरी बनाने के लिए सक्षम होना चाहिए - उपयोगकर्ता "एबीसी", "एबीसी डीईएफ़", "एबीसी डीईएफ़ GHI" में पारित हो सकता है।

अंतिम क्वेरी होगा (सिंटेक्स, सही नहीं है मुझे पता है):

Select * from Documents Where Name Like %ABC% AND Name Like %DEF% AND Name like %GHI% 

तो, मैंने सोचा कि मैं कुछ इस तरह कर सकता है।

Dim query = From document In _context.Documents 

<< loop based on number of strings passed in >> 
query = query.Where(... what goes here??) 

किसी कारण से, मस्तिष्क मृत या कुछ और किया जा रहा है, मैं यह पता लगाने नहीं कर सकते VB.NET में यह काम करने के लिए कैसे, या अगर मैं इसे सही ढंग से कर रहा हूँ।

उत्तर

1
Dim query = From document In _context.Documents where document.name = 'xpto' select document 

या

Dim query = From document In _context.Documents where document.name.contains('xpto') select document 
37

मेरा मानना ​​है कि यह कैसे आप VB में यह करना होगा (मैं एक सी # डेवलपर हूँ) है:

query = query.where(Function(s) s = "ABC") 

देखें LINQ - Sample Queries कुछ उदाहरण के लिए।

+2

वीबी का तुलना ऑपरेटर इसके असाइनमेंट ऑपरेटर के समान है .. इसलिए == "एबीसी" होना चाहिए ("एबीसी" = एस) '। इसके अलावा, अच्छी नौकरी। –

+0

नहीं, यह LINQ नहीं है, यह एक Lambda है। –

+7

वास्तव में, यह दोनों है। यह लैम्डा अभिव्यक्ति का उपयोग करके LINQ विधि वाक्यविन्यास का एक उदाहरण है। –

0

आप एक पाश में ऐसा करते हैं, तो आप कुछ इस तरह कर सकते हैं:

.Where(Function(i as mytype) i.myfiltervar = WhatIWantToSelect) 
10

मुझे लगता है कि यहाँ मुश्किल हिस्सा क्वेरी पैरामीटर के अज्ञात संख्या है। आप यहां मदद करने के लिए अंतर्निहित LINQ IQueryable (टी) का उपयोग कर सकते हैं।

मुझे लगता है कि निम्नलिखित काम करेगा (यह, संकलित नहीं कर रहा है सिर्फ नोटपैड कोड यहाँ):

Public Function GetDocuments(criteria as String) 
    Dim splitCriteria = SplitTheCriteria(criteria) 

    dim query = from document in _context.Documents 

    For Each item in splitCriteria 
     Dim localItem = item 
     query = AddCriteriaToQuery(query, localItem) 
    Next 

    dim matchingDocuments = query.ToList() 
End Function 

Private Function AddCriteriaToQuery(query as IQueryable(Of Document), criteria as string) as IQueryable(Of Document) 
    return query.Where(Function(doc) doc.Name = criteria) 
End Function 

के बाद से LINQ जाएगा क्वेरी आप जोड़ सकते हैं जहां पाश में और उसके बाद आपकी क्वेरी पर खंड फोन में देरी-निष्पादित क्वेरी निष्पादित करने के अंत में .सूची()।

3

LINQ से SQL में आप क्वेरी प्रश्न की विधि का उपयोग करके अपनी क्वेरी में WHERE क्लॉज जोड़ सकते हैं, जैसा कि आपने अपने प्रश्न में नोट किया था। LIKE ऑपरेटर का उपयोग करने के लिए, उस विधि के कॉन्टैन्स विधि का उपयोग करने का प्रयास करें, जहां आप अपनी कॉल की लैम्ब्डा अभिव्यक्ति में कहां से पूछ रहे हैं।

यहां कंसोल एप्लिकेशन में एक सरल उदाहरण है। उम्मीद है कि यह आपको सही दिशा में ले जाएगा।

Public Class Doc 

    Private _docName As String 
    Public Property DocName() As String 
     Get 
      Return _docName 
     End Get 
     Set(ByVal value As String) 
      _docName = value 
     End Set 
    End Property 

    Public Sub New(ByVal newDocName As String) 
     _docName = newDocName 
    End Sub 
End Class 

Sub Main() 
    Dim Documents As New List(Of Doc) 
    Documents.Add(New Doc("ABC")) 
    Documents.Add(New Doc("DEF")) 
    Documents.Add(New Doc("GHI")) 
    Documents.Add(New Doc("ABC DEF")) 
    Documents.Add(New Doc("DEF GHI")) 
    Documents.Add(New Doc("GHI LMN")) 

    Dim qry = From docs In Documents 

    qry = qry.Where(Function(d) d.DocName.Contains("GHI")) 

    Dim qryResults As List(Of Doc) = qry.ToList() 

    For Each d As Doc In qryResults 
     Console.WriteLine(d.DocName) 
    Next 

End Sub 

नोट करें। कंटेनर ("जीएचआई")। विधि विधि के लैम्ब्डा अभिव्यक्ति में कॉल करें। मैं अभिव्यक्ति के पैरामीटर का संदर्भ दे रहा हूं, "डी", जो डॉकनाम संपत्ति का खुलासा करता है, जो आगे की प्रक्रिया का खुलासा करता है। यह आपके द्वारा अपेक्षित LIKE क्वेरी का उत्पादन करना चाहिए।

यह विधि additive है, यानी कॉल। जहां एक विधि में संलग्न किया जा सकता है ताकि अतिरिक्त क्वेरी ऑपरेटरों को आपकी क्वेरी के WHERE खंड में जोड़ा जा सके।