2012-12-03 18 views
7

ऐसा लगता है कि अधिकांश LINQ लैम्ब्डा अभिव्यक्तियों के साथ लिखा गया है। लैंबडा का उपयोग करके इस लिंक्स को फिर से लिखने के बारे में मैं कैसे जा सकता हूं, शैली के साथ थोड़े भ्रम (विशेष रूप से जुड़ने के साथ)?लैम्बडा अभिव्यक्तियों के साथ जुड़कर इस LINQ को फिर से लिखना कैसे करें?

var responses = 
      from c in questionRepository.GetReponses() 
      join o in questionRepository.GetQuestions() on 
      c.QuestionID equals o.QuestionID 
      where c.UserID == 9999 
      orderby o.DisplayOrder 
     select new { o.QuestionText, c.AnswerValue }; 
+0

आपको इसे फिर से लिखने की ज़रूरत नहीं है। यह ठीक है, जैसा कि ईमानदार होना है। etimes मैं एक शैली का उपयोग करता हूं और कभी-कभी दूसरा, और यह एक ऐसा मामला है जहां मैं शायद क्वेरी सिंटैक्स के लिए जाऊंगा। [एमएसडीएन] से (http://msdn.microsoft.com/en-us/library/bb397676.aspx): 'जब आप LINQ प्रश्न लिखते हैं तो एक नियम के रूप में, हम अनुशंसा करते हैं कि जब भी संभव हो, आप क्वेरी सिंटैक्स का उपयोग करें और जब भी आवश्यक हो, विधि वाक्यविन्यास । –

+1

मुझे जॉइन के लिए यह फॉर्म पसंद है। "लैम्ब्डा अभिव्यक्तियों" के साथ इसे 4 तर्क (प्लस रिसीवर) निर्दिष्ट करने की आवश्यकता होती है, जबकि उपर्युक्त के समान, अधिक अव्यवस्थित लगता है। –

+0

हालांकि क्वेरी सिंटैक्स जुड़ने के लिए आसान है, लैम्बडा सिंटैक्स डीबग करना आसान है। विवरण के लिए https://www.simple-talk.com/dotnet/.net-framework/linq-secrets-revealed-chaining-and-debugging/ – Roger

उत्तर

15

मैं जुड़ने के लिए "LINQ वाक्यविन्यास" पसंद करता हूं क्योंकि मुझे लगता है कि यह क्लीनर दिखता है।

किसी भी मामले में, LINQ-join "Lambda Expression" -join में अनुवाद करने का तरीका यहां दिया गया है।

के लिए अनुवाद:

from a in AA 
join b in BB on 
a.Y equals b.Y 
select new {a, b} 

है:

AA.Join(    // L 
    BB,     // R 
    a => a.Y, b => b.Y // L -> join value, R -> join value 
    (a, b) => new {a, b}) // L+R result 

अन्य LINQ खोजशब्दों ज्यादा कन्वर्ट करने के लिए (जैसे OrderBy(u => u.DisplayOrder) सरल हैं, और सिर्फ . के साथ "एक साथ श्रृंखलित" कर रहे हैं - यह एक दे। जाओ!

+0

@ user166390 इस सहायता में देखें। – User

+0

मुझे लगता है कि आप b => b.Y और (ए, बी) => नया {ए, बी} के बीच एक अल्पविराम गायब हैं, मैं इस पर नया हूं, मैं गलत हो सकता हूं। – WizardHammer

6
var responses = questionRepository.GetReponses() 
        .Join(questionRepository.GetQuestions(), 
         c => c.QuestionID 
         o => o.QuestionID 
         (c, o) => new {c, o}) 
        .Where(x => x.c.UserID == 99999) 
        .OrderBy(x => x.o.DisplayOrder) 
        .Select(x => new {x.o.QuestionText, x.c.AnswerValue}); 
+2

धन्यवाद यह मदद की। – User