使用LINQ Except()处理两个不同类型的集合

本文关键字:同类型 集合 两个 LINQ Except 处理 使用 | 更新日期: 2023-09-27 18:11:52

我不能在这里使用这个例子,因为它特定于询问者使用的结构。

当前,我要:

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) )
    ...

任何想法?

使用LINQ Except()处理两个不同类型的集合

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));

您必须使用投影(即Select)将一个转换为另一个,或者可以计算为布尔值的一些逻辑,然后使用Where