Linq查询帮助

时间:2011-02-15 15:04:59

标签: c# linq

我有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中进行的每次尝试都无法正常工作。

有什么想法吗?

5 个答案:

答案 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;