从ado.net实体模型中获取列名称

时间:2011-08-31 16:18:24

标签: c# linq-to-sql c#-4.0

如何从db获取列名?

目前,我正在使用ado.net实体模型通过linq-sql与db进行交互。我已经搜索了StackOverflow,我收到了一些有用的帖子,但我尝试过的任何内容都没有。

喜欢这篇文章:

How do I return the column names of a LINQ entity

我尝试了Conrad Frix的回复,但他们没有用。无论如何,我不确定他的意思是“Datacontext”。那是实体吗?

    AttributeMappingSource mappping = new System.Data.Linq.Mapping.AttributeMappingSource();
    var model = mappping.GetModel(typeof (AdoModelEntities));
    var table = model.GetTable(typeof (TableName));

    var qFields= from fields in table.RowType.DataMembers
            where fields.IsPersistent == true
            select fields;

    foreach (var field in qFields)
        Console.WriteLine(field.Name);

这不起作用,因为table为null

1 个答案:

答案 0 :(得分:2)

你可以这样做......

Object LinqObject = Activator.CreateInstance(tableName, null);

//For each field in the database (or property in Linq object)
foreach (PropertyInfo pi in LinqObject.GetType().GetProperties())
{     
     String name = pi.Name;
}

LinqObject将是您尝试获取名称的表对象。如何创建它并不重要。如果您只有字符串名称,这是一种创建它的方法。

假设您的.dbml有一个名为“Order”的表,它可以正常工作:

Object LinqObject = new Order();

显然,您不必将对象的引用声明为Object。