2
J'ai vérifié avant de poster, mais je n'ai pas trouvé de solution. Je suis nouveau à linq et ça me vide le cerveau pour le comprendre. J'ai un XML et je veux utiliser linq pour remplir un objet qui a un objet enfant.objets enfants dans linq
le xml et mon linq sont ci-dessous. Mon numéro est sur cette ligne
TaskItems = t.Elements("taskdetail").ToList<TaskItem>() //this line doesn't work
Comment remplir cet objet enfant?
var task1 = from t in xd.Descendants("taskheader")
select new
{
Id = t.Element("id").Value,
Name = t.Element("name").Value,
IsActive = Convert.ToBoolean(Convert.ToInt16(t.Element("isactive").Value))
TaskItems = t.Elements("taskdetail").ToList<TaskItem>()
};
<tasks>
<taskheader>
<id>1</id>
<name>some task</name>
<isactive>1</isactive>
<taskdetail>
<taskid>1</taskid>
<name>action1</name>
<value>some action</value>
</taskdetail>
<taskdetail>
<taskid>1</taskid>
<name>action2</name>
<value>some other action</value>
</taskdetail>
</taskheader>
</tasks>
public class Task
{
public int Id;
public string Name;
public bool IsActive;
public List<TaskItem> TaskItems = new List<TaskItem>();
}
public class TaskItem
{
public int TaskId;
public string Name;
public string Value;
}
Cela ressemble à elle renvoie une liste de type anonyme. Avez-vous oublié de spécifier 'select new Task' ou cela fonctionnera-t-il tel quel? – CoderDennis
@Dennis Palmer: Il devrait probablement être une nouvelle tâche, je vais mettre à jour la réponse. Le code original a le même bug/fonctionnalité - J'ai seulement changé la partie 'TaskItems = ...'. –
@Dennis Palmer: OK, je l'ai mis à jour. J'ai aussi dû lancer l'Id à un entier pour le compiler, et pendant que j'y étais, j'ai simplifié la logique de calcul de 'IsActive'. Merci pour le commentaire. –