我要做的是以任何形式返回 LinqtoSql dbml 表对象中的所有列名,可以将其转换为 List 对象并显示给用户。
原因是我有一个带有硬编码 Xaml 列定义的 DxGrid,它只显示 dbml 表列的子集。
我想允许用户从当前不可见的其他列中进行选择,然后我可以从那里创建新的列对象并将选定的列添加到网格中的集合中。
任何帮助将不胜感激,谢谢。
我要做的是以任何形式返回 LinqtoSql dbml 表对象中的所有列名,可以将其转换为 List 对象并显示给用户。
原因是我有一个带有硬编码 Xaml 列定义的 DxGrid,它只显示 dbml 表列的子集。
我想允许用户从当前不可见的其他列中进行选择,然后我可以从那里创建新的列对象并将选定的列添加到网格中的集合中。
任何帮助将不胜感激,谢谢。
由于您在一天结束时仍在处理具体的对象类型,例如 Northwind 数据库中的 Product 类,您可以使用反射枚举返回类型的公共属性并以这种方式创建您的列表。
var columnNames = typeof(Product).GetProperties().Select(pi => pi.Name).ToList();
从那里您可以将完整列表与您的硬编码集进行比较。
由于每个表列都由 Linq2Sql 类中的一个属性表示,因此通过反射可以很容易地获取它们的名称。在Type
Linq2Sql 类中,只需搜索用 Linq 修饰的属性ColumnAttribute
。
以下是数据库表“Building”的示例:
using System.Data.Linq.Mapping;
...
...
var columnNames = typeof(Building)
.GetProperties()
.Where(p => p.GetCustomAttributes(typeof(ColumnAttribute), false).Any())
.Select(p => p.Name)
.ToList();