Healthcare IT Blog

A place to blog about Healthcare Informatics Software Development Implementations

image
How to get length of a LINQ to SQL class's attribute?

By Technical Team Technosoft |25 August 2014

The following code snippet will return the length of a DB field from a SQL to Linq class object. Pass the instance of the object and name of the DB field.

public static int GetLengthLimit(object obj, string field)
{
int dblenint = 0;   // default value = we can't determine the length
 
Type type = obj.GetType();
PropertyInfo prop = type.GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
 
// Find the Linq 'Column' attribute
// e.g. [Column(Storage="_FileName", DbType="NChar(256) NOT NULL", CanBeNull=false)]
object[] info = prop.GetCustomAttributes(typeof(ColumnAttribute), true);
// Assume there is just one
if (info.Length == 1)
{
ColumnAttribute ca = (ColumnAttribute)info[0];
string dbtype = ca.DbType.ToUpper();
 
if (dbtype.StartsWith("CHAR") || dbtype.StartsWith("NCHAR") || dbtype.StartsWith("NVARCHAR") ||dbtype.StartsWith("VARCHAR"))
{
int index1 = dbtype.IndexOf("(");
int index2 = dbtype.IndexOf(")");
string dblen = dbtype.Substring(index1 + 1, index2 - index1 - 1);
int.TryParse(dblen, out dblenint);
}
 
else if (dbtype.StartsWith("DATETIME"))
{
dblenint = 8;
}
}
 
return dblenint;