किसी को भी पता है कि अगर यह एक CLR संग्रहीत प्रक्रिया अंदर एक DataTable पर LINQ का उपयोग करना संभव (और कैसे) नहीं है?LINQ संग्रहित प्रक्रिया
मैं तथापि PROJ एक मानक WinForms में एक DataTable पर LINQ का उपयोग कर कोई समस्या नहीं; मैं SQL2005 पर VS2010 में एक डाटाबेस परियोजना का उपयोग कर रहा है और एक संग्रहित प्रक्रिया बनाने:
(सरलीकृत सूची)
[Microsoft.SqlServer.Server.SqlProcedure]
public static void ProcessReOrder()
{
using (SqlConnection conn = new SqlConnection("context connection=true")) {
SqlDataAdapter adapter = new SqlDataAdapter("database.dbo.OtherSp", conn);
DataTable table = new DataTable("ReOrder");
adapter.Fill(table);
var query = from t in table.AsEnumerable()
where t.Field<int>("Id") > 1000 select t.Field<int>("Id");
etc.....
}
समस्या, है AsEnumerable() एक विस्तार विधि है और हालांकि मैंने को का उपयोग LINQ के संदर्भ में मिला है; यह अभी भी नहीं मिला है।
Google को खोजना, मुझे विश्वास है कि यह फ्रेमवर्क में दफन किए गए LINQ इकाई संदर्भ (डीएलएल) का उपयोग करने के साथ करना है, क्योंकि यह एक डीबी परियोजना है, इसलिए हमें किसी भी डीएलएल पर संदर्भ जोड़ने नहीं हैं प्रणाली; ऐड रेफरेंस बॉक्स कुछ चुनिंदा असेंबली तक ही सीमित है और ब्राउज़ नहीं है ... बटन।
प्रदर्शन के मुद्दों आदि की परवाह किए बिना, मैं नहीं मेरी नेट संग्रहीत proc अंदर ADO/T-SQL का एक बहुत रोल सौंपने के लिए चाहते हैं; मैं LINQ और कोड को विभिन्न परतों/डीबी प्लेटफ़ॉर्म पर स्थानांतरित करने की क्षमता पसंद करता हूं। क्या LINQ एक स्टोरेज प्रो के अंदर डेटाटेबल पर समर्थित है (मैं अनुमान नहीं लगा रहा हूं) या क्या मैं यहां बेस से पूरी तरह से बंद हूं और टी-एसक्यूएल के साथ कोड करना चाहिए?
क्यों नहीं तुम सिर्फ अपने खुद के 'AsEnumerable' विधि लिखना चाहते हैं? यह एक लाइनर है: 'foreach (tableRow में tableRow r) उपज रिटर्न आर;' वैसे, 'AsEnumerable'' System.Data.DataSetExtensions' में है। – mquander
यदि आप LINQ-TO-SQL या Entity Framework जैसे ओआरएम का उपयोग करते हैं तो आप संग्रहीत प्रक्रियाओं को जोड़ सकते हैं और उन्हें एक विधि कॉल की तरह कॉल कर सकते हैं। –
@mquander, मुझे संदेह है कि यह मेरा एकमात्र विकल्प होगा। मैं एमएस 'LINQ कार्यान्वयन के कुछ हिस्सों को दोबारा कोड करने की कोशिश नहीं कर रहा हूं लेकिन इसका उपयोग "जैसा है" - विशेष रूप से कोड सीएलआर संग्रहीत प्रक्रिया के बाहर एक अतिरिक्त इम्प्ले के बिना काम करता है। आप सही हैं, यह इकाई नामस्थान नहीं है लेकिन System.Data.DataSetExtensions (मेरी गलती), केवल डीबी परियोजना से डीएलएल का संदर्भ नहीं दे सकता है। ऐसा लगता है कि एमएस आपको केवल एससी सर्वर पर तैनात एसी का उपयोग करने देगा। धन्यवाद। –