linq比较2列表

时间:2011-09-08 16:31:59

标签: linq compare

var companytoexclude = from c in db.Companies
                   from p in c.Projects
                   where p.ProjectEndDate == null
                   select c;

var list = from m in db.Members.Include("Companies.Projects.Experiences")
                     where m.MemberId == id
                     select m;

如何排除公司在列表中排除的公司?

会员有很多公司 公司有很多项目 项目有很多经验



K有点解决了。 所以我所做的就是加入

   foreach (Company c in companytoexclude )
            {
                list .First().Companies.Remove(c);
            }

那么更容易展示这个吗? 我希望会员拥有公司名单,而不仅仅是公司。

一些数据

Member
MemberId    Name
2011        Jet

Company
CompanyId   MemberId    CompanyName
18          2011            Company1
29          2011            Company2

ProjectId   CompanyId   ProjectName ProjectEndDate
1           29          Project1    2008-08-01 00:00:00.000
2           29          Project2    2009-08-01 00:00:00.000
3           18          Project3        NULL

现在我希望它返回除了company1和project3

之外的所有内容

1 个答案:

答案 0 :(得分:2)

怎么样:

var list = from m in db.Members.Include("Companies.Projects.Experiences")
           where m.MemberId == id
           where !m.Companies.Intersect(companiesToExclude).Any()
           select m;

这只会返回不包含您尝试排除的任何公司的成员。

请注意,鉴于你指的是一个MemberId,我几乎只期待一个结果......目前还不清楚你要做什么。

如果您希望排除公司公司以外的所有公司,则很容易:

var member = db.Members.Include("Companies.Projects.Experiences")
               .Single(m => m.MemberId == id);
var companies = member.Companies.Except(companiesToExclude);

如果那不是您所追求的,请澄清您的问题。

另请注意,您的companiesToExclude查询可能不适合开始。您是否尝试使用任何项目排除所有公司并使用空结束日期?如果是这样,你想要:

var companiesToExclude = db.Companies
                           .Where(c => c.Projects
                                        .Any(p => p.ProjectEndDate == null))