C# select 使用 linq 将数据导入视图模型
C# select data into the viewmodel using linq
我有一个视图模型
public class CompanyDetailVM {
public string CompanyName { get; set; }
public IEnumerable<Comments> Comments { get; set; }
}
我想检索来自 XML 的所有数据,我也不知道如何获取评论列表(评论模型由 CommentText、DateTaken 组成)。我的代码如下所示:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = new Models.Comments {
CommentText= detail.Element("result").Element("comment").Element("text"),
DateTaken = detail.Element("result").Element("comment").Element("date")
}
}
错误:无法将类型 'Models.Comments' 隐式转换为 'System.Collections.Generic.IEnumerable
我也不认为做新的 Models.Comments 是正确的方法。如何正确修复代码?
如果您的 XML 中只有一条评论 - 就像您在这里所做的那样 - 那么最简单的方法是:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = new [] {
new Models.Comments {
CommentText= detail.Element("result").Element("comment").Element("text"),
DateTaken = detail.Element("result").Element("comment").Element("date")
}
}
}
(注意 shorthand 数组文字语法 - new [] { ... }
用于轻松创建数组(当然实现 IEnumerable<>
))
如果您的 XML 可能包含多个评论,例如
<result>
<name>Test</name>
<comment><text>One</text>...</comment>
<comment><text>Two</text>...</comment>
</result>
然后您可能想要使用 LinqToXML 将所有 <comment>
标签转换为 Models.Comments
对象。
目前,您将 Models.Comment
对象分配给了 属性 期望 IEnumerable<Comments>
类型,然后触发了该转换错误。您可以像这样使用 LINQ 从 XML 创建 IEnumerable<Comments>
:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = from comment in detail.Element("result").Elements("comment")
select new Models.Comments
{
CommentText = (string)comment.Element("text"),
DateTaken = (DateTime)comment.Element("date")
}
}
请注意,我使用 Elements("comment")
(复数 Elements
)假设您在 XML 源中可能有多个 <comment>
元素。
我有一个视图模型
public class CompanyDetailVM {
public string CompanyName { get; set; }
public IEnumerable<Comments> Comments { get; set; }
}
我想检索来自 XML 的所有数据,我也不知道如何获取评论列表(评论模型由 CommentText、DateTaken 组成)。我的代码如下所示:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = new Models.Comments {
CommentText= detail.Element("result").Element("comment").Element("text"),
DateTaken = detail.Element("result").Element("comment").Element("date")
}
}
错误:无法将类型 'Models.Comments' 隐式转换为 'System.Collections.Generic.IEnumerable
我也不认为做新的 Models.Comments 是正确的方法。如何正确修复代码?
如果您的 XML 中只有一条评论 - 就像您在这里所做的那样 - 那么最简单的方法是:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = new [] {
new Models.Comments {
CommentText= detail.Element("result").Element("comment").Element("text"),
DateTaken = detail.Element("result").Element("comment").Element("date")
}
}
}
(注意 shorthand 数组文字语法 - new [] { ... }
用于轻松创建数组(当然实现 IEnumerable<>
))
如果您的 XML 可能包含多个评论,例如
<result>
<name>Test</name>
<comment><text>One</text>...</comment>
<comment><text>Two</text>...</comment>
</result>
然后您可能想要使用 LinqToXML 将所有 <comment>
标签转换为 Models.Comments
对象。
目前,您将 Models.Comment
对象分配给了 属性 期望 IEnumerable<Comments>
类型,然后触发了该转换错误。您可以像这样使用 LINQ 从 XML 创建 IEnumerable<Comments>
:
var model= new CompanyDetailVM
{
CompanyName = detail.Element("result").Element("name").Value,
Comments = from comment in detail.Element("result").Elements("comment")
select new Models.Comments
{
CommentText = (string)comment.Element("text"),
DateTaken = (DateTime)comment.Element("date")
}
}
请注意,我使用 Elements("comment")
(复数 Elements
)假设您在 XML 源中可能有多个 <comment>
元素。