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> 元素。