我不能使用示例here,因为它特定于问询者所使用的结构。

目前,我要去:

PropertyInfo[] props = this.GetType().GetProperties();
foreach (DataColumn dataColumn in dataAsDataRow.Table.Columns)
    if( !props.Any(p => p.Name == dataColumn.ColumnName) )
        ...


我宁愿一行中有一些内容,例如:

foreach (DataColumn dataColumn in dataAsDataRow.Table.Columns.Cast<DataColumn>.Except(props) )
    ...


有任何想法吗?

最佳答案

var columns = dataAsDataRow.Table.Columns.Cast<DataColumn>().Where(column => !props.Any(p => p.Name == column.ColumnName);
foreach(DataColumn in columns)
    ....


或略微优化的版本(与往常一样,取决于运行时的列数,属性等):

PropertyInfo[] props = this.GetType().GetProperties();
var lookup = new HashSet<string>(props.Select(x=>x.Name));
var columns = dataAsDataRow.Table.Columns.Cast<DataColumn>().Where(column => !lookup.Contains(column.Name));

10-04 14:33