Linq i GroupJoin, jaki zwróci typ

0

Witam.
Mam pytanie odnośnie poniższego kodu jakiego typu będzie result. Ide podpowiada mniej więcej takie coś:

List<annonymus type: int Key, IEnumerable<Persons> Person

Pomimo tej podpowiedzi nie potrafię z tego odczytać, dlatego proszę Was o pomoc.

Próbowałem:
List<IEnumerable<Persons>>
i wiele innych...

Pewnie odpowiedź jest błaha, dlatego piszę to w newbie.
Chciałbym wynik (zmienna result) zwrócić w metodzie, dlatego potrzebuję znać typ.

class Language
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class Person
{
    public int LanguageId { get; set; }
    public string FirstName { get; set; }
}

static void Sample_GroupJoin_Lambda()
{
    Language[] languages = new Language[]
    {
        new Language {Id = 1, Name = "English"},
        new Language {Id = 2, Name = "Russian"}
    };

    Person[] persons = new Person[]
    {
        new Person { LanguageId = 1, FirstName = "Tom" },
        new Person { LanguageId = 1, FirstName = "Sandy" },
        new Person { LanguageId = 2, FirstName = "Vladimir" },
        new Person { LanguageId = 2, FirstName = "Mikhail" },
    };

    var result = languages.GroupJoin(persons, lang => lang.Id, pers => pers.LanguageId, 
        (lang, ps) => new { Key = lang.Name, Persons = ps }).ToList();

}
2

nie mozesz sobie tak po prostu zwrocic typu anonimowego z metody.
mozliwe rozwiazania:

  • zwracac List<Object>
  • zwrocic List<Tuple<...>>
  • zwrocic List<TwojTypDanych> - preferowany sposob
2

Utwórz sobie klasę, która będzie reprezentowała to Twoje grupowanie

public class GroupData
{
    public string Key { get; set; }
    public List<Person> Persons { get; set; }
}

a potem twórz jej, a nie anonimowe obiekty w LINQ:

var result = languages.GroupJoin(persons, lang => lang.Id, pers => pers.LanguageId, 
        (lang, ps) =>  new GroupData { Key = lang.Name, Persons = ps }).ToList();

1 użytkowników online, w tym zalogowanych: 0, gości: 1