直接从linq查询返回类 - c#

我还是LINQ的新手。是否可以执行以下操作:

例如,我有一堂课:

public class Person
{
        public string FirstName { get; set; }
        public string LastName { get; set; }
}

现在,我想通过读取(例如)xml文件的内容并将其返回来将其作为类对象返回。

所以如果我读了这个
xml文件:

<person>
    <firstname></firstname>
    <lastname></lastname>
</person>

阅读人(例如,这属于“人”类):

public static Person ReadPerson(xmlpath)
{
    XDocument xd = XDocument.Load(xmlpath);
    var person = (from p in xd.Descendants("person")
                  select new Person
                  {
                      FirstName = p.Element("firstname").value,
                      LastName = p.Element("lastname").value
                  });
    return person as Person;
}

现在,如果我在其他地方执行以下操作:

Person p = new Person();
p = People.Person(xmlpath);
Response.Write(p.FirstName);

在这里,p.FirstName返回一个空异常。我了解的原因是因为linq查询返回了一个空类。

所以我的问题是,有没有直接在查询中的类中添加内容并返回它而又没有运行foreach循环并手动添加所有内容的情况? (如下所示:)

Person p = new Person();
foreach (var x in person)
{
    p.FirstName = x.FirstName;
    p.LastName = x.LastName;
}

抱歉,这是一个愚蠢的问题。

谢谢

参考方案

您需要区分阅读一系列项目和阅读单个项目。当前,person中的ReadPerson变量实际上是IEnumerable<Person>类型-您返回的person as Person将为空,因为该序列实际上不是Person的实例。如果使用强制转换而不是as,则您会更早看到-但是必须对类型做任何事情的事实应该是警告,您未完全正确。

我怀疑您实际上想要这样:

public static IEnumerable<Person> ReadPeople(xmlpath)
{
    XDocument xd = XDocument.Load(xmlpath);
    return from p in xd.Descendants("person")
           select new Person
           {
               FirstName = p.Element("firstname").value,
               LastName = p.Element("lastname").value
           });
}

或这个:

public static Person ReadPerson(xmlpath)
{
    XDocument xd = XDocument.Load(xmlpath);
    XElement element = xd.Descendants("person").First();
    return new Person
           {
               FirstName = element.Element("firstname").value,
               LastName = element.Element("lastname").value
           });
}

如果没有person元素或多人元素,则还应考虑要发生的情况。 FirstFirstOrDefaultSingleSingleOrDefault方法在这里对您有用。

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

LINQ to XML语法 - c#

我有一个简单的POCO类,用于保存从XML文件提取的数据,该XML文件定义如下:public class Demographics { public string FirstName { get; set; } public string LastName { get; set; } public string MiddleName { get; set; …

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

Json到php,json_decode返回NULL - php

我正在用PHP进行JSON解析器的一些API,用于存储有关遗产的信息。我在解析时遇到问题,因为它返回的是NULL值而不是数组或对象。简单的JSON代码可以很好地解析,但是可以这样:{"success":true,"totalCount":1,"data":[{"id":99694…