如果 T 的属性与数据表中的列名匹配,请选择这些属性并忽略大小写

本文关键字:属性 请选择 大小写 数据表 如果 | 更新日期: 2023-09-27 18:34:52

我有一个泛型函数的一部分,只有当属性信息的名称与其中一个数据表列匹配时,我才需要将属性信息复制到列表中。

    DataTable dt = new DataTable();
    .
    .
    .
//here i want only the properties that have the same name of some column in the datatable
    List<PropertyInfo> properties = typeof(T).GetProperties().ToList();

如何使用 LINQ 执行此操作?

我试过了

List<PropertyInfo> properties = typeof(T).GetProperties().Where(p=> dt.Columns.Contains(p.Name)).ToList();

但它似乎不是那样工作的,因为我需要忽略两侧属性名称和列名称的大小写

ToUpper(( 和 ToLower(( 函数的问题在于有时列名不是完全小写也不是大写

如果 T 的属性与数据表中的列名匹配,请选择这些属性并忽略大小写

尝试这样的事情:

List<PropertyInfo> properties = typeof(T).GetProperties().Where(p => dt.Columns.Cast<DataColumn>().Any(c => c.ColumnName.Equals(p.Name, StringComparison.InvariantCultureIgnoreCase))).ToList();