LINQ查询结果到对象

时间:2019-12-02 08:10:02

标签: c# xml linq

我有一个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对象中,如何实现呢?

1 个答案:

答案 0 :(得分:1)

您可以从每个项目中选择一个新的 { $group: { "_id": "$_id.uid", "winnerCount": { $sum: {$cond: [{$gt: ['$winnings.coins', 0]}, 1, 0]} }, // count of winners who have more than 0 coins "looserCount": { $sum: {$cond: [{$gt: ['$winnings.coins', 0]}, 0, 1]} } // count of loosers who dont have any coins } }

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(); 获得可重用性。

相关问题