Skip to main content
 首页 » 编程设计

c#之将 LINQ Except() 与两个不同类型的集合一起使用

2024年02月03日24youxin

我无法使用示例 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));