我有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中进行的每次尝试都没有正常工作.
有任何想法吗?
最简单的方法:
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)