[英]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.