使用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) )
...
任何想法?
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
。