Как правильно написать join в linq?

У меня есть список List<VisitorRequestDto> и словарь Dictionary<Guid, (string, string, string, string)>

public class VisitorRequestDto
{
    public uint Num { get; set; }
    public List<VisitorDto> Visitors { get; set; }
}

public class VisitorDto
{
    public Guid Id {get;set;}
}

Я хочу сделать join и вытащить данные из словаря, VisitorRequestDto, VisitorDto. Вот такие данные должны вернуться:

[Num, Id, string, string, string, string]

У меня получается возвращать только со словаря и Visitors, делаю я так:

var subjects =
        from visitor in visitorRequests.SelectMany( x => x.Visitors )
        join archiveEvent in events on visitor.Id equals archiveEvent.Key
        select new Output
        {
             SubjectId = visitor.Id,
             Entry = archiveEvent.Value.minEntry.Value.Timestamp,
             Exit = archiveEvent.Value.maxExit.Value.Timestamp,
             EntryTerritory = archiveEvent.Value.minEntry.Value.TerritoryIDs,
             ExitTerritory = archiveEvent.Value.maxExit.Value.TerritoryIDs
        };

Не хватает num, но я не совсем понимаю, как мне его достать. Если добавить from visitorRequests после join, то он вообще будет странно джойнить и вернет совсем не то


Ответы (1 шт):

Автор решения: tym32167

Может так

    var dict = new Dictionary<Guid, (string, string, string, string)>();
    var visitorRequests = new List<VisitorRequestDto>();

    var subjects = visitorRequests
        .SelectMany(x => x.Visitors.Select(z => new
            {
                Num = x.Num,
                Id = z.Id,
                Entry1 = dict[z.Id].Item1,
                Entry2 = dict[z.Id].Item2,
                Entry3 = dict[z.Id].Item3,
                Entry4 = dict[z.Id].Item4,
            })).ToArray();
→ Ссылка