2009-02-25 7 views
26

क्या लिंक से एसक्यूएल में सामान्य टेबल एक्सप्रेशन (सीटीई) (जैसा कि नीचे दिखाया गया है) करना संभव है। मैं सीटीई के साथ-साथ लिंक से एसक्यूएल के लिए काफी नया हूं।सामान्य तालिका अभिव्यक्ति (सीटीई) linq-to-sql में?

मैं वर्तमान में संग्रहीत प्रक्रिया मुक्त हूं (लेकिन किसी भी माध्यम से उनके खिलाफ नहीं) इसलिए मैं केवल एक प्रश्न के लिए संग्रहित प्रोसेस में छलांग नहीं लेना चाहता हूं जब तक कि यह पूरी तरह से आवश्यक न हो।

यहाँ मैं एसक्यूएल में क्या कर रहा का एक उदाहरण है कि मैं अगर मैं एसक्यूएल को Linq में कर सकते हैं सोच रहा हूँ:

WITH TaskHierarchy (TaskID, [Subject], ParentID, HierarchyLevel, HierarchyPath) AS 
(
    -- Base case 
    SELECT 
     TaskID, 
     [Subject], 
     ParentID, 
     1 as HierarchyLevel, 
     CONVERT(VARCHAR(MAX),'/') AS HierarchyPath 
    FROM Task 
    WHERE TaskID = 2 

    UNION ALL 

    -- Recursive step 
    SELECT 
     t.TaskID, 
     t.Subject, 
     t.ParentID, 
     th.HierarchyLevel + 1 AS HierarchyLevel, 
     CONVERT(varchar(MAX),th.HierarchyPath + CONVERT(VARCHAR(32),t.ParentID) + '/') AS HierarchyPath 
    FROM Task t 
     INNER JOIN TaskHierarchy th ON 
     t.ParentID = th.TaskID 
) 

SELECT * 
FROM TaskHierarchy 
ORDER BY HierarchyLevel, [Subject] 

उत्तर

17

AFAIK, इस ऑब्जेक्ट मॉडल द्वारा समर्थित नहीं है। हालांकि, LINQ एक क्वेरी निष्पादित करने के लिए एक विधि का समर्थन करता है (अजीब रूप से पर्याप्त डेटाकॉन्टेक्स्ट .ExecuteQuery कहा जाता है)। ऐसा लगता है कि आप इसका उपयोग एसक्यूएल के मनमानी टुकड़े को कॉल करने के लिए कर सकते हैं और इसे LINQ पर वापस मैप कर सकते हैं। एम्बेडेड एसक्यूएल के कारण आप एसक्यूएल मुक्त नहीं होंगे, लेकिन आपको एक स्पोक का उपयोग नहीं करना पड़ेगा।

How to: Directly Execute SQL Queries (LINQ to SQL)