首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用linq比较两个列表并返回不匹配的项目

使用linq比较两个列表并返回不匹配的项目
EN

Stack Overflow用户
提问于 2012-08-15 01:33:14
回答 8查看 115.8K关注 0票数 41

我有两张单子

代码语言:javascript
复制
List<Sent> SentList;
List<Messages> MsgList;

两者都具有相同的属性,称为MsgID;

代码语言:javascript
复制
MsgList            SentList  

MsgID Content      MsgID Content Stauts
1       aaa        1       aaa     0
2       bbb        3       ccc     0
3       ccc        
4       ddd
5       eee

我想将Msglist中的MsgID与发送列表进行比较,并使用linq将不在发送列表中的需要项目

代码语言:javascript
复制
Result 

MsgID Content
2       bbb
4       ddd
5       eee
EN

回答 8

Stack Overflow用户

发布于 2012-08-15 01:36:17

你可以这样做:

代码语言:javascript
复制
HashSet<int> sentIDs = new HashSet<int>(SentList.Select(s => s.MsgID));

var results = MsgList.Where(m => !sentIDs.Contains(m.MsgID));

这将返回在SentList中没有匹配ID的MsgList中的所有消息。

票数 52
EN

Stack Overflow用户

发布于 2012-08-15 01:52:14

好吧,你已经有了很好的答案,但它们大多是Lambda。更多的LINQ方法如下所示

代码语言:javascript
复制
var NotSentMessages =
                from msg in MsgList
                where !SentList.Any(x => x.MsgID == msg.MsgID)
                select msg;
票数 17
EN

Stack Overflow用户

发布于 2016-09-08 19:53:58

你可以这样做,这是最快的过程

代码语言:javascript
复制
Var result = MsgList.Except(MsgList.Where(o => SentList.Select(s => s.MsgID).ToList().Contains(o.MsgID))).ToList();

这将为您提供预期的输出。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11957685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档