2009-11-26 28 views
16

LINQ का उपयोग करके, मैं तालिका के कॉलम नाम कैसे प्राप्त कर सकता हूं? सी # 3.0, 3.5 ढांचेLINQ: तालिका कॉलम नाम प्राप्त करें

+0

'linq-to-sql' के लिए retagged, अगर आप किसी अन्य प्रकार का "LINQ" मतलब है तो कृपया अपना प्रश्न संपादित करें। –

+0

दुर्भाग्य से यह क्वेरी LINQPad के अंदर चलती है तो मैं LINQPad में संदर्भ कैसे प्राप्त करूं? –

उत्तर

5

के साथ अपने L2S वर्गों के गुण मुझे लगता है आप एसक्यूएल के लिए LINQ का उपयोग कर, DataContext.Mapping संपत्ति में जो मामले नज़र में से मतलब है। मैं यही उपयोग करता हूं।

यदि आपका मतलब यह नहीं है, तो शायद आप जो हासिल करने की कोशिश कर रहे हैं उस पर विस्तार कर सकते हैं?

+0

मैं LINQPad (सी #) का उपयोग कर एक प्रोग्राम लिखना चाहता हूं जो इसके लिए एसक्यूएल डालने के बयान बना सकता है इसके लिए मुझे टेबल के कॉलम नामों की आवश्यकता है। –

+5

इसे थोड़ा सा स्पष्ट किया जा सकता है ... यह एक उत्तर का अधिक नहीं है। –

+1

कुछ उदाहरण उपयोग बहुत अच्छा होगा। मैपिंग एपीआई कम से कम कहने के लिए थोड़ा सा अंतर्ज्ञानी है ... –

0

दोहराएं प्रतिबिंब

2

अपने डेटा संदर्भ पर ExecuteQuery विधि का उपयोग करें और यह SQL स्क्रिप्ट निष्पादित करें:

var columnNames = ctx.ExecuteQuery<string> 
    ("SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('your table name');"); 

यह आपको लगता है कि तालिका में सभी स्तंभ नाम आपके द्वारा निर्दिष्ट के साथ एक IEnumerable<string> देता है।

बेशक, यदि आप चाहते हैं और इसकी आवश्यकता है, तो आप हमेशा SQL सर्वर में sys.columns कैटलॉग दृश्य से अधिक जानकारी (जैसे डेटा प्रकार, अधिकतम लंबाई) पुनर्प्राप्त कर सकते हैं।

0

यदि आप मैप किए गए तालिका के लिए कॉलम प्राप्त करने के बारे में बात कर रहे हैं तो कॉलम विशेषताओं को कैसे प्राप्त करें, यह देखने के लिए this answer देखें। वहां से आप कॉलम नाम, प्रकार इत्यादि प्राप्त कर सकते हैं

6

मैंने इस प्रश्न पर एक ही चीज़ की तलाश में ठोकर खाई और वास्तव में एक अच्छा जवाब नहीं देखा। मैंने ये ढूंढ निकाला। इसे सी # अभिव्यक्ति मोड के तहत बस LINQPad में फेंक दें।

from t in typeof(UserQuery).GetProperties() 
where t.Name == "Customers" 
from c in t.GetValue(this,null).GetType().GetGenericArguments()[0].GetFields() 
select c.Name 

फिट बैठने पर संशोधित करें।

17

हो सकता है कि यह बहुत देर हो चुकी है, लेकिन, मैं

var db = new DataContex(); 
var columnNames = db.Mapping.MappingSource 
         .GetModel(typeof(DataContex)) 
         .GetMetaType(typeof(_tablename)) 
         .DataMembers; 
+1

धन्यवाद, आपने अभी मुझे एक नाव भार बचाया है। यह स्वीकार्य उत्तर से बेहतर है क्योंकि यह दिखाता है कि DataContext.Mapping प्रॉपर्टी का उपयोग कैसे करें। –

+3

VB.Net के लिए 'टाइपऑफ (डेटाकॉन्टेक्स्ट)' के बजाय 'GetType (DataContext)' का उपयोग करें। – Zarepheth

2

मैं LINQPad

from t in typeof(table_name).GetFields() select t.Name 
+0

ध्यान दें कि यह तालिका नाम का अनूठा संस्करण है। –

15

में इस कोड को नीचे दिए गए कोड रिटर्न से काम किया जाएगा सभी स्तंभ के नाम का इस्तेमाल इस कोड को इस समस्या का समाधान तालिका

var columnnames = from t in typeof(table_name).GetProperties() select t.Name 
+2

यह सुनिश्चित नहीं है कि यह क्यों ऊपर नहीं उठाया गया था, यह सबसे सुंदर जवाब है। यहां लैम्ब्डा सिंटैक्स समतुल्य है: var columnnames = typeof (table_name) .GetProperties()। चुनें (t => t.Name); – draconis

+0

शायद यह अपरिवर्तित नहीं था क्योंकि आप न केवल कॉलम प्राप्त करते हैं बल्कि अतिरिक्त गुण भी प्राप्त करते हैं। यह आम तौर पर दिमाग में विस्तारशीलता के साथ एक आंशिक वर्ग है। – mbx

0
  var query = from x in DataBase.Table_Name 
         select x.Column_Name; 
0

sp_help 'TableName'

एमएस एसक्यूएल सर्वर

0

करने के लिए एक LINQPad एसक्यूएल खिड़की LINQPad में के लिए एक विकल्प:

TableNames.Take (1) काम करता है।

यह टाइप करना तेज़ है। (यद्यपि आप एक आदर्श दुनिया में हैं, फिर भी किसी भी पंक्ति का चयन न करने के लिए अच्छा होगा।)

ध्यान दें कि यह तालिका नाम का बहुवचन रूप है। आप टेक (0) भी कर सकते हैं और एसक्यूएल परिणाम टैब देख सकते हैं।

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