gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:46:57 25 4
gpt4 key购买 nike

我对 LINQ 还很陌生。是否可以执行以下操作:

例如,我有一个类:

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

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

所以如果我读到这篇文章xml 文件:

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

读取 Person(假设它属于 People 类):

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元素,或多个人物元素。 First , FirstOrDefault , SingleSingleOrDefault方法在这里对您有用。

关于c# - 直接从 linq 查询返回类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6120894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com