【问题标题】:LINQ to XML return an object instead of IEnumerable<object>LINQ to XML 返回一个对象而不是 IEnumerable<object>
【发布时间】:2012-05-04 05:53:00
【问题描述】:

我有这个代码:

   MyObject Obj {get;set;}
    var x = from xml in xmlDocument.Descendants("Master")
        select new MyObject
        {
            PropOne = //code to get data from xml
            PropTwo = //code to get data from xml
        }

结果是varIEnumerable&lt;MyObject&gt;,我需要使用foreach循环将x分配给Obj

foreach(var i in x)
{
    Obj = i;
}

有没有一种方法可以使用 LINQ 语句而不会以这种方式返回 IEnumerable?或者像我这样使用foreach 循环是否正常?

【问题讨论】:

    标签: c# linq-to-xml


    【解决方案1】:

    是的:

    Obj = (from xml in xmlDocument.Descendants("Master")
            select new MyObject
            {
                PropOne = //code to get data from xml
                PropTwo = //code to get data from xml
            }).FirstOrDefault();
    

    【讨论】:

      【解决方案2】:

      如果你只返回一个对象,你可以这样做:

       MyObject Obj {get;set;}
      
       var x = (from xml in xmlDocument.Descendants("Master")
          select new MyObject
          {
              PropOne = //code to get data from xml
              PropTwo = //code to get data from xml
          }).Single();
      

      现在你的 x 对象应该是 MyObject 类型

      【讨论】:

        【解决方案3】:

        您需要检索第一个项目。我会在您的 LINQ 查询之后亲自创建它:

        var element = xmlDocument.Descendants("Master").Single(); // Or .First() if appropriate
        Obj = new MyObject
            {
                PropOne = //code to get data from xml in "element"
                PropTwo = //code to get data from xml in "element"
            };
        

        我个人认为这更符合您的意图,因为您要检索单个元素,然后从中构建单个对象。

        【讨论】:

          猜你喜欢
          • 2023-03-17
          • 1970-01-01
          • 2013-05-05
          • 1970-01-01
          • 2011-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多