[英]C# select data into the viewmodel using linq
我有一个viewmodel
public class CompanyDetailVM {
public string CompanyName { get; set; }
public IEnumerable<Comments> Comments { get; set; }
}
我想检索来自XML的所有数据,我也无法弄清楚如何获取注释列表(Comments模型由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中只有一个Comment(就像您在此处所做的那样),那么最简单的方法是:
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")
}
}
}
(请注意速记数组文字语法-new 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")
}
}
请注意,假设您在XML源中可能有多个<comment>
元素,我使用Elements("comment")
(带有多个Elements
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.