Выберите значение и выровняйте подсписок объектов в списке объектов - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть список объектов, где каждый объект в списке содержит список объектов.Мне нужно выбрать строку из каждого из объектов в подсписке и включить ее в основной список.По сути, выровнять подсписок.

Цель состоит в том, чтобы ввести эти данные в электронную таблицу.

Это две мои модели

class Phrase
{
    public string Parent { get; private set; }
    public string Value { get; private set; }
}
class Translation
{
    public string Key { get; private set; }
    public string Translatable { get; private set; }
    public List<Phrase> Phrases { get; private set; }
}

Вот как может выглядеть список

{ Key = "coffee", Translatable = "", Phrase = [{ Parent = "English", Value = "Coffee" }, { Parent = "Swedish", Value = "Kaffe" }] },
{ Key = "candy", Translatable = "", Phrase = [{ Parent = "English", Value = "Candy" }, { Parent = "Swedish", Value = "Godis" }] },
{ Key = "computer", Translatable = "", Phrase = [{ Parent = "English", Value = "Computer" }, { Parent = "Swedish", Value = "Dator" }] }

Как я уже говорил, цель состоит в том, чтобы вставить эти данные в электронную таблицу, поэтому в соответствии с приведенным выше списком электронная таблица теоретически должна выглядеть следующим образом:

Key      | Translatable | English  | Swedish
---------------------------------------------
coffee   |              | Coffee   | Kaffe
candy    |              | Candy    | Godis
computer |              | Computer | Dator

Меня волнует только Value в объекте Phrase.

Вы можете выбрать Key и Translatable из списка следующим образом:

var query = from t in parser.translations
        from p in t.Phrases
        select new { t.Key, t.Translatable };

, что даст

{ Key = "coffee", Translatable = ""},
{ Key = "candy", Translatable = ""},
{ Key = "computer", Translatable = ""}

Но как мне тогда включить все значения из списка фраз в каждый объект?Цель будет примерно такой:

{ Key = "coffee", Translatable = "", Value1 = "Coffee", Value2 = "Kaffe"},
{ Key = "candy", Translatable = "", Value1 = "Candy", Value2 = "Godis"},
{ Key = "computer", Translatable = "", Value1 = "Computer", Value2 = "Dator"}

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 сентября 2018

Если вы всегда получаете два ключа в фразе (английский, шведский) и вам нужны только значения.Вы можете попробовать это.

Добавить новый класс для результата

class tr
{
    public string Key { get; set; }
    public string trn { get; set; }
    public string English { get; set; }
    public string Swedish { get; set; }
}

и использовать этот запрос

var query = from t in translations
        select new tr() 
        { 
            Key = t.Key, 
            trn = t.Translatable, 
            English = t.Phrases.Single(p => p.Parent == "English").Value, 
            Swedish = t.Phrases.Single(p => p.Parent == "Swedish").Value 
        };
...