2009-04-09 16 views
7

के भीतर सभी तालिकाओं की एक सूची प्राप्त करें मेरे पास 100 से अधिक तालिकाओं के साथ डेटाकॉन्टेक्स्ट (एसक्यूएल से लिंक) है, क्या उन सभी तालिकाओं की सूची प्राप्त करना संभव है और कहें कि उन्हें कंसोल पर प्रिंट करें? यह एक मूर्ख सवाल हो सकता है।लिंक: डेटाकॉन्टेक्स्ट

धन्यवाद।

उत्तर

28

यह ऊपर से कहीं अधिक आसान है और कोई प्रतिबिंब आवश्यक नहीं है। लिंक से एसक्यूएल में मैपिंग प्रॉपर्टी है जिसका उपयोग आप सभी तालिकाओं की गणना प्राप्त करने के लिए कर सकते हैं।

context.Mapping.GetTables(); 
+0

अच्छा, मुझे इसके बारे में पता नहीं था। –

+0

हू हू जो भी बेहतर है! – Sergey

+0

हाँ, मैं अपने जैसे सामान ढूंढ रहा हूं। एक को पास करने के लिए हमेशा मजेदार है :)। –

4

आप प्रतिबिंब के माध्यम से ऐसा कर सकते हैं। अनिवार्य रूप से, आप अपने DataContext कक्षा में गुणों पर पुन: प्रयास करते हैं। प्रत्येक प्रॉपर्टी के लिए, यह देखने के लिए जांचें कि क्या उस प्रॉपर्टी के सामान्य पैरामीटर प्रकार में TableAttribute विशेषता है। यदि ऐसा है, तो वह संपत्ति एक तालिका का प्रतिनिधित्व करती है:

using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
+0

यह लानत है! आप बहुत तेजी से लिखते हैं: पी – SirDemon

+0

@SirDemon वास्तव में मुझे पूरी तरह से जवाब गलत मिला, इसे हटा दिया गया, विजुअल स्टूडियो में सही उत्तर का परीक्षण किया गया, अनदेखा और संशोधित :) –

+0

हाहा आपको बहुत धन्यवाद, वह तेज़ था! – Sergey

3
dc= new myDataContext(); 
var listaTablas = (from tables in dc.Mapping.GetTables() select tables.TableName).ToList(); 
1
using System.Reflection; 
using System.Data.Linq.Mappings; 

PropertyInfo[] properties = typeof(MyDataContext).GetProperties(); 
foreach (PropertyInfo property in properties) 
{ 
    if(property.PropertyType.IsGenericType) 
    { 
     object[] attribs = property.PropertyType.GetGenericArguments()[0].GetCustomAttributes(typeof(TableAttribute), false); 
     if(attribs.Length > 0) 
     { 
      Console.WriteLine(property.Name); 
     } 
    } 
} 
संबंधित मुद्दे