2011-01-20 95 views
0

目前,我有以下LINQ查询。我怎样才能将两个查询合并为一个。基本上,写一个LINQ查询,以带回从如何将两个LINQ语句合并为一个来执行list2.Except(list1)?

IEnumerable<int> deltaList = people2010.Except(allPeople); 

除了在单个查询中得到的结果。

var people2010 = Contacts.Where(x => x.Contractors 
.Any(d => d.ContractorsStatusTrackings 
.Any(date => date.StatusDate.Year >= 2010))) 
.Select(x => x.ContactID); 

var allPeople = Contacts.Where(x => x.Contractors 
.Any(m => m.ContactID == x.ContactID)) 
.Select(x=> x.ContactID); 

谢谢!

+0

从逻辑上讲,是否有意义获得排除所有人的一部分人?那么为什么你的变量名称暗示这就是你想要的? – 2011-01-20 16:12:27

回答

1

为什么你不能像你这样做Except?不要忘记,你的people2010allPeople变量只是查询 - 它们不是数据。为什么不直接使用它们呢?

如果由于某种原因不能接受,请给我们提供更多信息 - 比如是否在LINQ to Object,LINQ to SQL等,以及使用Except时出现了什么问题。

+0

“别忘了你的people2010和allPeople变量只是查询 - 它们不是数据” - 好点!此时,有理由避免Except。我正在寻找改进查询的可行方法。也许写一个查询而不是两个。 – DenaliHardtail 2011-01-20 16:27:13

0

这听起来像你只是寻找一个更优雅的方式来编写你的查询。我相信这是一个更优雅的方式来编写您的组合查询:

var deltaList = 
    from contact in Contacts 
    let contractors = contact.Contractors 
    where contractors.Any(ctor => ctor.ContractorStatusTrackings 
             .Any(date => date.StatusDate.Year >= 2010)) 
      && !contractors.Any(m => m.ContactID == contact.ContactID) 
    select contact.ContactID