LINQ JOIN儿童系列 [英] LINQ JOIN Child Collection
问题描述
我有一个返回IEnumerable的meetingRepository
类和一个返回IEnumerable<Attendee>
I have a meetingRepository
class that returns IEnumerable and an attendeeRepository
class that returns IEnumerable<Attendee>
public class meetingRepository
{
IEnumerable<Meeting> GetAll()
{
//return all Meetings
}
}
public class attendeeRepository
{
IEnumerable<Attendee>GetAll()
{
//return all Attendees
}
}
public class Meeting
{
public int Id { get; set; }
public DateTime Date { get; set; }
public string FilePath { get; set; }
public int Duration { get; set; }
public IEnumerable<Attendee> Attendees { get; set; }
}
public class Attendee
{
public int Id { get; set; }
public int MeetingId { get; set; }
public string Name { get set;}
public string Role { get; set; }
}
我正在努力提出将我的IEnumerable<Meeting>
对象与我的IEnumerable<Attendee>
对象相关联的link语句,该IEnumerable<Attendee>
对象将基于Meeting
的Attendees
属性中的每个Attendee
均与其相关的Attendee
对象相关联Attendee.Id
Im struggling to come up with the link statement that will join my IEnumerable<Meeting>
object with my IEnumerable<Attendee>
joining each Attendee
in the Attendees
property of the Meeting
to its related Attendee
object based on the Attendee.Id
感谢帮助
修改
@Thomas我可用的MeetingRepository不会加载与会者,它只是所有会议的完整列表(我编辑为包括Id属性).
因此,为了澄清起见,我的MeetingRepository返回了一个部分会议对象的IEnumerable(无与会者)
@Thomas the meetingRepository I have available does not load the Attendees, it is just a full list of all Meetings (I editted to include the Id property).
So, to clarify, my meetingRepository returns an IEnumerable of a partial Meeting object (no attendees)
Id
Date
Duration
FilePath
和我的与会者存储库返回一个IEnumerable参与者(已编辑为包括MeetingId
and my attendeeRepository returns an IEnumerable of participants (editted to include MeetingId
Id
MeetingId
Name
Role
修改
我想出了以下方法似乎很好
I came up with the folowing that seems to work fine
var meetingsFull = from m in meetings
join a in attendees
on m.Id equals a.MeetingId into ma
select new Meeting
{
Id=pc.Id,
Date=pc.Date,
Duration=pc.Duration,
FilePath=pc.FilePath,
Attendees=ma
};
推荐答案
var attendees = attendeeRepository.GetAll();
foreach(var meeting in meetingRepository.GetAll())
{
meeting.Attendees = attendees.Where(at=>at.MeetingId == meeting.Id);
}
这应该做到.完成这些任务后,您的所有会议现在都可以在其中准备与会者列表了.
This should do it. After these assignments your all meetings now have the attendees lists ready in them.
这篇关于LINQ JOIN儿童系列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!