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;
如何排除公司在列表中排除的公司?
会员有很多公司 公司有很多项目 项目有很多经验
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
之外的所有内容答案 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))