没有 IEqualityComparer 实现的 LINQ

发布于 2024-10-19 01:19:49 字数 244 浏览 2 评论 0原文

我有 2 个不同类别的集合。 MyClass1 - 姓名、年龄等 MyClass2 - 尼克、年龄等

我想查找除此集合之外的其他内容。类似

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

但我无法编写此代码,需要使用 IEqualityComparer 接口实现我自己的比较器类对于这个小任务来说,它的开销看起来非常大。有什么优雅的解决方案吗?

I have 2 collection with different classes. MyClass1 - Name,Age,etc MyClass2 - Nick, Age, etc

I want to find except of this collections. Something like

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

But i cannt write this code and need to implement my own comparer class with IEqualityComparer interface and it's looking very overhead for this small task. Is there any elegant solution?

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

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

发布评论

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

评论(2

蒲公英的约定 2024-10-26 01:19:49

Except 确实不适用于两种不同的序列类型。我建议您使用类似以下内容的内容:(

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));

请注意,这不会执行Except的“独特”方面。如果您需要,请这么说,我们可以计算出您需要的内容。)

Except really doesn't work with two different sequence types. I suggest that instead, you use something like:

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));

(Note that this won't perform the "distinct" aspect of Except. If you need that, please say so and we can work out what you need.)

╄→承喏 2024-10-26 01:19:49

好吧,建立一组所有的昵称,然后与之对抗。

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
               where !nicknames.Contains(l1.Name)
               select l1;

Well, build a set of all the nicknames, then run against that.

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
               where !nicknames.Contains(l1.Name)
               select l1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文