. , , ColumnAttribute. :
public static List<string> GetColumnNames<TEntity>(Table<TEntity> table)
where TEntity : class
{
return GetColumnNames(typeof(TEntity));
}
public static List<string> GetColumnNames(DataContext context, string functionName)
{
var retType = context.GetType().GetMethod(functionName).ReturnType;
System.Diagnostics.Debug.Assert(retType.Name == "ISingleResult`1");
return GetColumnNames(retType.GetGenericArguments().Single());
}
public static List<string> GetColumnNames(Type entityType)
{
return (from p in entityType.GetProperties()
let columnAttribute = p.GetCustomAttributes(false)
.OfType<System.Data.Linq.Mapping.ColumnAttribute>()
.SingleOrDefault()
where columnAttribute != null
select columnAttribute.Name ?? p.Name)
.ToList();
}
var names1 = GetColumnNames(DataContext, "GetTable");
var names2 = GetColumnNames(typeof(GetTable));
, , . ( LINQ to SQL) , .
public static List<string> GetColumnNames<TEntity>(Table<TEntity> table)
where TEntity : class
{
return new System.Data.Linq.Mapping.AttributeMappingSource()
.GetModel(table.Context.GetType())
.GetTable(typeof(TEntity))
.RowType
.DataMembers
.Where(dm => !dm.IsAssociation)
.Select(dm => dm.MappedName)
.ToList();
}
public static List<string> GetColumnNamesMeta(DataContext context, string functionName)
{
var type = context.GetType();
return new System.Data.Linq.Mapping.AttributeMappingSource()
.GetModel(type)
.GetFunction(type.GetMethod(functionName))
.ResultRowTypes
.SelectMany(rrt => rrt.DataMembers
.Where(dm => !dm.IsAssociation)
.Select(dm => dm.MappedName))
.ToList();
}