C# 对两个不同类型的集合使用LINQ Except()
我不能使用这个例子,因为它是特定于询问者使用的结构的 目前,我将:C# 对两个不同类型的集合使用LINQ Except(),c#,linq,.net-4.0,C#,Linq,.net 4.0,我不能使用这个例子,因为它是特定于询问者使用的结构的 目前,我将: PropertyInfo[] props = this.GetType().GetProperties(); foreach (DataColumn dataColumn in dataAsDataRow.Table.Columns) if( !props.Any(p => p.Name == dataColumn.ColumnName) ) ... 我更喜欢一行中的内容,例如: foreach
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) )
...
有什么想法吗?您必须使用投影(即选择)将一个转换为另一个,或者使用一些可以计算为布尔值的逻辑,然后使用Where。您必须使用投影(即选择)将一个转换为另一个,或者使用一些可以计算为布尔值的逻辑,然后使用Where 或者像往常一样略微优化的版本,具体取决于运行时的列数、属性等:
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));
或者像往常一样略微优化的版本,具体取决于运行时的列数、属性等:
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));
不幸的是,dataAsDataRow.Table.Columns是DataColumnCollection,而不是DataColumns数组,因此会出现编译器错误:“DataColumnCollection”不包含“Where”的定义。但是,通过添加Columns.Cast.Where可以轻松解决此问题。谢谢你的主意!不幸的是,dataAsDataRow.Table.Columns是DataColumnCollection,而不是DataColumns数组,因此会出现编译器错误:“DataColumnCollection”不包含“Where”的定义。但是,通过添加Columns.Cast.Where可以轻松解决此问题。谢谢你的主意!