我有2个列表,都是业务对象。
第一个对象是
public class Mail
{
string id;
string name;
string address;
....
}
第二个对象是
public class DoNotMail
{
string id;
string otherinfo;
....
}
列表是
List<Mail> _mailList
List<DoNotMail> _doNotMailList
我需要一个linq查询来获取Mail.Id不在DoNotMail.id中的所有邮件项目
如果这是正常的sql,我想我会在DoNotMail.id为空的情况下进行左连接,但是我尝试在linq中进行的每次尝试都无法正常工作。
有什么想法吗?
答案 0 :(得分:5)
最简单的方法:
var doNotMailIds = new HashSet<string>(_doNotMailList.Select(x => x.id));
var mailItems = _mailList.Where(x => !doNotMailIds.Contains(x.id));
假设您想要完整的Mail
项目。如果您只需要他们的ID,您可以在一个查询中执行此操作:
var mailIds = _mailList.Select(x => x.id)
.Except(_doNotMailList.Select(x => x.id));
答案 1 :(得分:1)
var mailItem = _mailList.Where(x => !_doNotMailList.Contains(x.id));
答案 2 :(得分:1)
如果在两个类中重写Equals方法,可以使用它:
_mailList.Except(_doNotMailList).ToList();
答案 3 :(得分:1)
试试这个:
var results = from m in _mailList
where !(from nm in _doNotMailList select nm.Id)
.Contains(m.Id)
select m;
它不等于un Sql。
答案 4 :(得分:0)
尝试
var query =来自邮件中的m 哪里!(来自Do在DoNotMail中的d 选择d.Id) 。载(m.Id) 选择m;