LINQ JOIN儿童系列 [英] LINQ JOIN Child Collection

查看:35
本文介绍了LINQ JOIN儿童系列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个返回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>对象将基于MeetingAttendees属性中的每个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆