LINQ to XML返回一个对象而不是IEnumerable <object> </object>

时间:2012-05-03 21:47:14

标签: c# linq-to-xml

我有这段代码:

   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<MyObject>,我需要使用foreach循环将x分配给Obj

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

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

3 个答案:

答案 0 :(得分:6)

是的:

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();

答案 1 :(得分:1)

如果您只返回一个对象,则可以执行以下操作:

 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类型

答案 2 :(得分:1)

您需要检索第一个项目。我会在你的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"
    };

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