Заполните класс от Linq до XML - PullRequest
1 голос
/ 12 октября 2010

Хорошо, у меня есть XML-файл, который выглядит примерно так:

 <Templates>
    <Template>
        <TemplateID>00X500000011iTSEAY</TemplateID>
        <To>
            <To type='User'>00550000000mfOU</To>
            <To type='User'>00550000000mb3pAAA</To>
            <To type='Group'>00G50000001PiHz</To>
            <To type='AccountTeam'>AccountExecutive</To>
        </To>
        <CC>
            <CC type='AccountTeam'>SalesLead</CC>
        </CC>
        <BCC>
            <BCC type='SalesTeam'>SalesManager</BCC>
        </BCC>
    </Template>
</Templates>

С этим я пытаюсь заполнить некоторые классы, которые могут это понять. Итак, первая мысль, которая у меня возникла, была что-то вроде этого для To Elements:

public class EmailRecipient
{
    public ToRecipient To {get;set;}
    public CCRecipient CC {get;set;}
}

public class ToRecipient
{
    public string Key {get;set;}
    public string Type {get;set;}
}

Не совсем элегантно, но это мой черновик. Я пытаюсь использовать Linq to XML для этого, так как я знаю, какой у меня TemplateId, и тогда я могу просто заполнить класс значениями. Вот где я нахожусь ... и застрял в этом тестовом приложении:

var results = from x in xmlDoc.Descendants(XName.Get("Template")
                      where x.Element(XName.Get("TemplateID")).Value == "00X500000011iTSEAY"
                      select new EmailRecipient()
                        {
                            ToRecipient = 
                        };

Учитывая все вышесказанное, я ищу коллекцию "Tos", где каждое значение "to" может иметь значение "type".

Любая помощь будет принята с благодарностью, я сделал больше с XML за последние 3 дня, чем за последние 3 года, и это немного.

Большое спасибо за любую помощь.

1 Ответ

1 голос
/ 12 октября 2010

Поскольку у вас есть более одного ToRecipient для каждого экземпляра EmailRecipient, тип свойства To должен быть типом коллекции.Если вы сделаете его IEnumerable:

    public class EmailRecipient
    {
        public IEnumerable<ToRecipient> To { get; set; }

    }

, тогда этот запрос LINQ должен выполнить свою задачу:

var results = from x in xmlDoc.Descendants(XName.Get("Template"))
              where x.Element(XName.Get("TemplateID")).Value == "00X500000011iTSEAY"
              select new EmailRecipient()
              {
                  To = (from to in x.Element("To").Elements("To")
                        select new ToRecipient { Key = to.Value, Type = to.Attribute("type").Value}).ToList()
              };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...