Предположим, вы говорите о таблице Contact
в сборке с именем YourAssembly
в контексте с именем MyDataContext
Использование отражения на столе
Вы можете использовать отражение, чтобы получить свойства, как если бы вы использовали любой тип
var properties = из свойства в
Type.GetType ( "YourAssembly.Contact"). GetProperties ()
выберите свойство. Имя
;
foreach (var property in properties)
Console.WriteLine(property);
Как отмечает shaunmartin, это вернет все свойства, а не только свойства Column Mapped. Также следует отметить, что это вернет только публичные свойства. Вам нужно включить значение BindingFlags для параметра bindingAttr, равного GetProperties , чтобы получить непубличные свойства
Использование метамодели
Вы можете использовать метамодель System.Data.Linq.Mapping , чтобы получить поля (я добавил IsPersistant, чтобы получить только свойства Column Mapped)
AttributeMappingSource mappping = new System.Data.Linq.Mapping.AttributeMappingSource();
var model = mappping.GetModel(typeof (MyDataContext));
var table = model.GetTable(typeof (Contact));
var qFields= from fields in table.RowType.DataMembers
where fields.IsPersistent == true
select fields;
foreach (var field in qFields)
Console.WriteLine(field.Name);
Использование отражения из результата запроса
Если, с другой стороны, вы хотели получить его из результата запроса, вы все равно можете использовать отражение.
MyDataContextdc = new MyDataContext();
Table<Contact> contacts = dc.GetTable<Contact>();
var q = from c in contacts
select new
{
c.FirstName,
c.LastName
};
var columns = q.First();
var properties = (from property in columns.GetType().GetProperties()
select property.Name).ToList();