gpt4 book ai didi

linq-to-xml - linq 中的子对象

转载 作者:行者123 更新时间:2023-12-04 06:52:26 25 4
gpt4 key购买 nike

我在发布之前检查过,但找不到解决方案。我是 linq 的新手,它正在耗尽我的大脑来理解它。我有一个 xml,想使用 linq 来填充具有子对象的对象。

xml 和我的 linq 在下面。我的问题在这条线上

TaskItems = t.Elements("taskdetail").ToList<TaskItem>() //this line doesn't work

我如何填充这个子对象?
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;
}

最佳答案

尝试这个:

var tasks = from t in xd.Descendants("taskheader")
select new Task
{
Id = (int)t.Element("id"),
Name = t.Element("name").Value,
IsActive = t.Element("isactive").Value == "1",
TaskItems = t.Elements("taskdetail").Select(e => new TaskItem
{
TaskId = (int)e.Element("taskid"),
Name = (string)e.Element("name"),
Value = (string)e.Element("value"),
}).ToList()
};

关于linq-to-xml - linq 中的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2932779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com