Linq查询帮助

1 c# linq

我有2个列表,都是业务对象.

第一个对象是

public class Mail
{
   string id;
   string name;
   string address;
   ....
}
Run Code Online (Sandbox Code Playgroud)

第二个目标是

public class DoNotMail
{
   string id;
   string otherinfo;
   ....
}
Run Code Online (Sandbox Code Playgroud)

这些清单是

List<Mail> _mailList
List<DoNotMail> _doNotMailList
Run Code Online (Sandbox Code Playgroud)

我需要一个linq查询来获取Mail.Id不在DoNotMail.id中的所有Mail项目

如果这是正常的sql,我想我会做一个DoNotMail.id为空的左连接,但我尝试在linq中进行的每次尝试都没有正常工作.

有任何想法吗?

Jon*_*eet 5

最简单的方法:

var doNotMailIds = new HashSet<string>(_doNotMailList.Select(x => x.id));
var mailItems = _mailList.Where(x => !doNotMailIds.Contains(x.id));
Run Code Online (Sandbox Code Playgroud)

这是假设你想要完整的Mail项目.如果您只需要他们的ID,您可以在一个查询中执行此操作:

var mailIds = _mailList.Select(x => x.id)
                       .Except(_doNotMailList.Select(x => x.id));
Run Code Online (Sandbox Code Playgroud)