将 LINQ except() 与两个不同类型的集合一起使用

发布于 2024-12-11 08:50:18 字数 560 浏览 0 评论 0原文

我无法使用此处的示例,因为它是具体到提问者所使用的结构。

目前,我要去:

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

有什么想法吗?

I can't use the example here because it's specific to the structure the asker was using.

Currently, I'm going:

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

I'd much rather have something in one line, such as:

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

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

纸伞微斜 2024-12-18 08:50:18
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));
var columns = dataAsDataRow.Table.Columns.Cast<DataColumn>().Where(column => !props.Any(p => p.Name == column.ColumnName);
foreach(DataColumn in columns) 
    ....

Or the slightly optimized version (as always, depending on the runtime number of columns, properties, etc, etc):

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));
指尖上的星空 2024-12-18 08:50:18

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

You will have to convert one to the other using a projection (i.e. Select), or some logic that can evaluate to a boolean then use a Where.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文