2009-12-17 21 views
13

में तालिका-नाम से तालिका-डेटा प्राप्त करें मुझे लिंक डेटाकॉन्टेक्स्ट से तालिका नाम से तालिका डेटा प्राप्त करने की आवश्यकता है।LINQ DataContext

इस

var results = db.Authors; 

के बजाय

मैं इस तरह से कुछ करने की जरूरत है।

string tableName = "Authors"; 

var results = db[tableName]; 

यह किसी भी तालिका का नाम हो सकता है जो डेटाकॉन्टेक्स्ट में उपलब्ध है।

उत्तर

15

को देखते हुए DataContext context और string tableName, तो आप सिर्फ कह सकते हैं:

var table = (ITable)context.GetType() 
          .GetProperty(tableName) 
          .GetValue(context, null); 
+0

ठीक है, ITable tbl = db.GetTableByName ("लेखक"); IENumerable रिकॉर्ड प्राप्त करने के लिए tbl तक कैसे पहुंचे? – Krunal

+1

एक 'आईटेबल' भी एक 'आईनेमरेबल' है, इसलिए अपनी पसंदीदा विधि का उपयोग करके रिकॉर्ड्स को समझाएं (उदा।, 'Foreach (ऑब्जेक्ट आर टीबीएल) {} ')। – jason

+0

लेकिन यह दृढ़ता से टाइप नहीं किया गया है। दृढ़ता से टाइप किए गए डेटा को प्राप्त करने के लिए मैं गतिशील रूप से कैसे जा सकता हूं? – Krunal

4

मुझे यकीन नहीं है कि तारों को पार करना एक सुरुचिपूर्ण समाधान है। मैं इकाई के प्रकार को विधि के लिए तर्क के रूप में भेजूंगा। इन पंक्तियों पर कुछ:

var table = _dataCont.GetTable(typeof(Customer)); 

Here MSDN प्रलेखीकरण है।

+0

मुझे टेबल डेटा प्राप्त करने के लिए मेरे स्ट्रिंग चर का उपयोग करने की आवश्यकता है। – Krunal

+0

डिजाइन के बाद से Linq2SQl इसका समर्थन नहीं करता है। आपको एक विधि बनाने की आवश्यकता होगी जो GetTableTypeFromString टाइप करें (स्ट्रिंग तालिका नाम); एक स्विच स्टेटमेंट लें और वांछित टेबल प्रकार – Perpetualcoder

3

मुझे यकीन है कि मैं एक अच्छा समाधान के रूप में यह सुझाव देंगे नहीं कर रहा हूँ, लेकिन अगर आप वास्तव में इसकी जरूरत है, तो आप कुछ इस तरह कर सकता है:

MyDBContext db = new MyDBContext(); 
Type t = db.GetType(); 
PropertyInfo p = t.GetProperty("Authors"); 
var table = p.GetValue(db, null); 

है कि आप जनसंपर्क जैसे लेखकों तालिका दे देंगे। टेबल।

+0

वापस करें यह 'table' को 'ऑब्जेक्ट' के रूप में टाइप करेगा; उपयोग से पहले आपको 'आईटेबल' पर डालना होगा। – jason

+0

क्या आप IENumerable या IQueryable के रूप में डेटा प्राप्त करने के लिए ITable का उपयोग कैसे कर सकते हैं? – Krunal

+1

यह पहले से ही एक IENumerable/IQueryable दोनों है। अंतर यह है कि यह जेनेरिक संस्करण IENumerable /IQueryable नहीं है, इसलिए आप इस पर दृढ़ता से टाइप किए गए प्रश्नों का उपयोग नहीं कर सकते हैं। लेकिन आप कमजोर टाइप किए गए प्रश्नों को करने के लिए डायनामिक लिनक का उपयोग कर सकते हैं। यहां अधिक जानकारी: http://www.beansoftware.com/ASP.NET-Tutorials/Dynamic-LINQ.aspx और इसे यहां डाउनलोड करें: http://code.msdn.microsoft.com/csharpsamples/Release/ProjectReleases.aspx? रिलीजआईडी = 8 (आप dynamic.cs की तलाश में हैं) – Terje

0

आप प्रकार जानते हैं, तो आप इसे डाल सकता। http://social.msdn.microsoft.com/Forums/en-US/f5e5f3c8-ac3a-49c7-8dd2-e248c8736ffd/using-variable-table-name-in-linq-syntax?forum=linqprojectgeneral

MyDataContext db = new MyDataContext(); 
Assembly assembly = Assembly.GetExecutingAssembly(); 
Type t = assembly.GetType("Namespace." + strTableName); 
if (t != null) 
{ 
    var foos = db.GetTable(t); 

    foreach (var f in foos) 
    { 
     PropertyInfo pi = f.GetType().GetProperty("Foo"); 
     int value = (int)pi.GetValue(f, null); 
     Console.WriteLine(value); 
    } 
}