【问题标题】:LINQ Query result to objectLINQ 查询结果到对象
【发布时间】:2020-03-26 19:45:49
【问题描述】:

我有一个 XML 文档,我在其中存储了一些数据,我需要查询该文件中的数据并获取一条记录,我使用此代码进行操作

   xmlDoc = XDocument.Load("Data.xml");
   var updateQuery = (from item in xmlDoc.Descendants("Event")
                      where item.Element("id").Value == id
                      select item).FirstOrDefault();
public class Event
{
    public string id { get; set; }
    public string title { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public virtual List<Contact> contacts { get; set; }
}
<Event>
    <id>1</id>
    <title>AA</title>
    <start>2019-12-01T14:13:58.863</start>
    <end>2019-12-01T15:13:58.787</end>
    <contacts>

      <contact>
        <id>1</id>
        <name>ABC</name>
      </contact>

      <contact>
        <id>2</id>
        <name>ABCD</name>
      </contact>

      <contact>
        <id>3</id>
        <name>ABCDE</name>
      </contact>

    </contacts>
  </Event>

我得到了完美的结果,但我需要将数据放入 Event 对象中,我该如何实现呢?

【问题讨论】:

  • 什么Event对象?
  • Event 对象是自定义类吗?如果是,则将选定的XElement 转换为Event 对象与LINQ 没有具体关系
  • 我建议创建一个public static Event FromXElement(XElement element) 方法。实现它与查询部分完全分开-您是否尝试过编写任何代码将元素转换为Event?发生了什么?
  • 扩展 Jon 的评论,首先你可以做 var eventObject = new Event { id = element.Decedents('id').FirstOrDefault().Value}

标签: c# xml linq


【解决方案1】:

您可以从每个项目中选择一个新的Event

var event = (from item in xmlDoc.Descendants("Event")
            where item.Element("id").Value == id
            select new Event
            {
                id = item.Element("id").Value,
                title = item.Element("title").Value,
                Start = DateTime.Parse(item.Element("start").Value),
                End = DateTime.Parse(item.Element("end").Value),
                contacts = item.Element("contacts").Elements("contact").Select(c => new Contact
                {
                    Id = c.Element("id").Value,
                    Name = c.Element("name").Value
                }).ToList()
            }).FirstOrDefault();

当然,您可以将此映射分解为一个单独的方法并使用select MyMappingMethod(item) 以实现可重用性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多