2012-09-02 14 views
9

में कनवर्ट करें मैंने हाल ही में लिंकपैड को उम्मीद में खरीदा है कि यह मुझे कुछ एसक्यूएल को LINQ कथन में परिवर्तित करने की अनुमति देगा।लिंककैड - एसक्यूएल को लिंक कमांड

लिंककैड का उपयोग करके, मैं डीबी संलग्न करने और SQL कथन चलाने में सक्षम हूं जो मुझे आवश्यक परिणाम देता है।

लेकिन मुझे SQL कथन को LINQ में परिवर्तित करने के लिए 'कमांड' नहीं मिल रहा है।

क्या आप कृपया मुझे बता सकते हैं कि लिंककैड का उपयोग कर SQL से LINQ को कैसे परिवर्तित करें? या एक और उपकरण।

+0

एक उपकरण है: –

+0

से नीचे मेरा उत्तर देखें यह प्रश्न भी देखें: http://stackoverflow.com/questions/296972/sql-to-linq-tool –

उत्तर

5

सामान्य रूप से एसक्यूएल को लिंक को @ एंड्रेस-एबेल के रूप में गुप्त करने के लिए कोई उपकरण नहीं है, लेकिन कभी-कभी आपको लिंक लिखना होगा जो बिल्कुल निर्दिष्ट SQL के रूप में निष्पादित होगा (उदाहरण के लिए प्रदर्शन समस्याओं, पिछड़े संगतता या किसी अन्य के कारण कारणों)।

इस मामले में मैं अपने आप को द्वारा रिवर्स इंजीनियरिंग करने के लिए आप सलाह लेंगे: डंप एसक्यूएल stdout को Linq से उत्पन्न बयान के

  1. कॉन्फ़िगर प्रवेश
  2. मैन्युअल Linq बयान को फिर से लिखने जब तक आप आप क्या जरूरत है
+1

लिंककैड के पास लिंक क्वेरी का वाकई अच्छा अनुवाद है एसक्यूएल (हालांकि यह .Net Linq-to-SQL लाइब्रेरी का उपयोग कर ऐसा करता है, इसलिए आपका माइलेज भिन्न हो सकता है)। मैंने पाया है कि यह सिर्फ लिंक पर शुरू करने वालों को शिक्षित करने का एक अच्छा काम करता है लेकिन एसक्यूएल से परिचित है और यह भी सत्यापित करता है कि मैंने लिंक में जो लिखा है वह SQL क्वेरी के समान परिणाम उत्पन्न कर रहा है। – Elsimer

3

लिंककैड में कोई SQL-> LINQ अनुवादक नहीं है। लिंककैड में वास्तव में कोई LINQ-> एसक्यूएल अनुवादक नहीं होता है। यह अनुवाद के लिए .Net Linq-to-Sql लाइब्रेरी या इकाई फ्रेमवर्क पर निर्भर करता है।

मुझे उस क्षमता के साथ किसी भी अन्य उपकरण के बारे में पता नहीं है। सरल मामलों में एक बनाना संभव होगा, लेकिन अधिक जटिल परिदृश्यों के लिए यह असंभव होगा क्योंकि कोई SQLQ अभिव्यक्ति नहीं है जो कुछ SQL संरचनाओं से मेल खाती है।

38

वहाँ एक उपकरण Linqer कहा जाता है मिल जाएगा, लेकिन सावधान रहें: एसक्यूएल से LINQ करने का लिप्यंतरण आप worst of both worlds दे सकते हैं।

उदाहरण के लिए, मान लीजिए कि आप $ 1000 की सभी खरीद या नकद में या वाशिंगटन में रहने वाले ग्राहकों द्वारा अधिक भुगतान करना चाहते हैं। SQL में क्वेरी यहां दी गई है:

SELECT p.* 
FROM Purchase p 
    LEFT OUTER JOIN 
     Customer c INNER JOIN Address a ON c.AddressID = a.ID 
    ON p.CustomerID = c.ID 
WHERE 
    (a.State = 'WA' || p.CustomerID IS NULL) 
    AND p.ID in 
    (
     SELECT PurchaseID FROM PurchaseItem 
     GROUP BY PurchaseID HAVING SUM (SaleAmount) > 1000 
    ) 

LINQ पर इसका अनुवाद कैसे किया जाएगा? गलत तरीका लिप्यंतरण LINQ में क्वेरी, बाहरी और आंतरिक जुड़ने, सबक्वायरी और समूह खंड को पुन: पेश करने का प्रयास कर रहा है। सही तरीके से सीधे LINQ में आपकी मूल क्वेरी (अंग्रेजी में) मैप करने के लिए, डेटा और संघ संपत्तियों की LINQ के रैखिक प्रवाह का लाभ है:

मैं सभी खरीद चाहते हैं ...

from p in db.Purchases 

.. .of $ 1000 या अधिक से अधिक ...

where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000 

... नकद में भुगतान ...

from p in db.Purchases 
where p.PurchaseItems.Sum (pi => pi.SaleAmount) > 1000 
where p.Customer == null || p.Customer.Address.State == "WA" 
select p 

अधिक जानकारी here:

where p.Customer == null 

... या द्वारा ग्राहकों को जो वाशिंगटन

|| p.Customer.Address.State == "WA" 

में रहते हैं यहाँ अंतिम क्वेरी है।

संबंधित मुद्दे