2008-11-04 15 views
6

का उपयोग कर "स्ट्रिंग" कॉलम के लिए अधिकतम लंबाई प्राप्त करें क्या VARCHAR, CHAR आदि के लिए अधिकतम कॉलम लंबाई प्राप्त करना संभव है?LINQ से SQL

+1

क्या आप कॉलम के लिए अधिकतम संभव लंबाई जानना चाहते हैं, उदा। वर्चर (1000) के लिए 1000 या इस कॉलम में मानों की अधिकतम लंबाई? – liggett78

उत्तर

1

शुद्ध T-SQL में आप इस क्वेरी का उपयोग कर सकते हैं: LINQ करने वाली एसक्यूएल के लिए

select max_length from sys.columns as c inner join sys.objects o on c.object_id = o.object_id where o.name = 'myTable' and c.name = 'myColumn' 

आप इसे LINQ में फिर से लिखने की जरूरत है।

4

यहाँ एक तरह से जो डेटाबेस को छू से बचा जाता है है:

  • प्रतिबिंब का उपयोग करना, इकाई वर्ग है कि प्रश्न में स्तंभ से मेल खाती है की संपत्ति मिलता है।
  • फिर, संपत्ति का System.Data.Linq.Mapping.Column विशेषता पुनर्प्राप्त करें।
  • फिर, कॉलम की लंबाई प्राप्त करने के लिए इस विशेषता की डीबीटाइप संपत्ति को पार्स करें (उदाहरण के लिए NVarChar (255) न्यूल)।
1

यहाँ उत्तर दिया:

public static int GetLengthLimit(Type type, string field) //definition changed so we no longer need the object reference 
//Type type = obj.GetType(); //comment this line 

और कॉल का उपयोग:

int i = GetLengthLimit(typeof(Pet), "Name"); 

किसी के बारे में सोच सकते

Linq to SQL - Underlying Column Length

हालांकि मैं यह neater बदलने के लिए मिला दृढ़ता से टाइप करने का तरीका क्षेत्र संदर्भ?

1
public static int GetLengthLimit(Model.RIVFeedsEntities ent, string table, string field) 
{ 
    int maxLength = 0; // default value = we can't determine the length 

    // Connect to the meta data... 
    MetadataWorkspace mw = ent.MetadataWorkspace; 

    // Force a read of the model (just in case)... 
    // http://thedatafarm.com/blog/data-access/quick-trick-for-forcing-metadataworkspace-itemcollections-to-load/ 
    var q = ent.Clients; 
    string n = q.ToTraceString(); 

    // Get the items (tables, views, etc)... 
    var items = mw.GetItems<EntityType>(DataSpace.SSpace); 
    foreach (var i in items) 
    { 
     if (i.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase)) 
     { 
      // wrapped in try/catch for other data types that don't have a MaxLength... 
      try 
      { 
       string val = i.Properties[field].TypeUsage.Facets["MaxLength"].Value.ToString(); 
       int.TryParse(val, out maxLength); 
      } 
      catch 
      { 
       maxLength = 0; 
      } 
      break; 
     } 
    } 

    return maxLength; 
}