4
我有三个表,需要编写一个linq查询,它基于两个不同的联接从所有活动中提取。Linq加入三个表
- 我需要在志愿者中ActivityVolunteers
- 我需要的所有活动,其中OrganizationID是在活动表和志愿属于organizaiton(OrganizationVolunteers),但不存在ActivityVolunteers活动。志愿者可能不属于该活动,但属于组织。
下面是我在编写Linq时的表格结构。
活动- ActivityID
- ActivityName
- OrganizationID
- ActivityID
- VolunteerID
- ActivityRole 个
- OrganizationID
- VolunteerID
这是我在LINQ两掌,我想不通加入两个结果集只得到了独特的活动。
from a in Activities
join av in ActivityVolunteers on a.ActivityID equals av.ActivityID
where av.VolunteerID==1
select new
{
a.ActivityID,
a.ActivityName,
av.ActivityRole,
a.OrganizationID
}
from org in (from a in Activities
join ov in OrganizationVolunteers on a.OrganizationID equals ov.OrganizationID
where ov.VolunteerID==1
select new
{
a.ActivityID,
a.ActivityName,
ActivityRole = "Prospect",
a.OrganizationID
})
select org
我试过一个工会,但它是复制记录。
(from a in Activities
join av in ActivityVolunteers on a.ActivityID equals av.ActivityID
where av.VolunteerID==1
select new
{
a.ActivityID,
a.ActivityName,
av.ActivityRole,
a.OrganizationID,
OrganizationName = (from o in Organizations where o.OrganizationID == a.OrganizationID select o.OrganizationName).FirstOrDefault()
}).Union
(from a in Activities
join ov in OrganizationVolunteers on a.OrganizationID equals ov.OrganizationID
where ov.VolunteerID==1
select new
{
a.ActivityID,
a.ActivityName,
ActivityRole = "Prospect",
a.OrganizationID,
OrganizationName = (from o in Organizations where o.OrganizationID == a.OrganizationID select o.OrganizationName).FirstOrDefault()
})
我想我正在寻找一个只提供不同的联盟。 – scottrakes 2010-07-19 20:12:19
'联合'提供了独特的答案... – 2010-07-19 20:30:10
这可能是有用的:http://stackoverflow.com/questions/8900077/linq-join-3-tables-with-or-condition/10784347#10784347 – Prasanna 2012-05-28 12:11:47