通过LINQ从XML获取数据并在View上显示?

时间:2014-08-05 13:19:55

标签: c# xml linq

我使用以下代码从XML文档中获取数据:

XDocument xml = XDocument.Load(xmlPath);

var bikes = from b in xml.Descendants("Photo")
            select new
            {
                date = (DateTime)b.Element("Date"),
                staffno = (Int32)b.Element("StaffNo"),
                file = (string)b.Element("File"),
                crimeref = (string)b.Element("CrimeRef")
            };

如果我使用var selectedBikes = bikes.Count();之类的东西,我可以看到总共有4辆自行车。但是,我不确定如何将这些数据实际存入列表,以便我可以使用Razor在我的视图中显示它。

我已经尝试了bikes.Select()bikes.All()和其他一些人,但没有任何喜悦。

2 个答案:

答案 0 :(得分:2)

  var lstBikes = bikes.ToList();  // or .ToArray(); your choice.

现在,bikes原样是IEnumerable,因此您可以将其传递给视图。您可能还想定义一个Photo类,并像这样使用它:

        class Photo
        {
            DateTime date  {get; set;}
            Int32 staffno {get; set;}
            string file {get; set;}
            string crimeref {get; set;}
        };

 // :
 var bikes = from b in xml.Descendants("Photo")
        select new Photo
        {
            date = (DateTime)b.Element("Date"),
            staffno = (Int32)b.Element("StaffNo"),
            file = (string)b.Element("File"),
            crimeref = (string)b.Element("CrimeRef")
        };

然后您可以在视图中说@model IEnumerable<Photo>

答案 1 :(得分:2)

很抱歉,如果我错了,因为我们暂时没有使用xml文件,但LINQ通常会返回IEnumerable&lt;&gt;宾语。因此,如果您想将其用作列表,您可以将其作为bikes.ToList() /它将枚举您的对象,您应该记住/。此外,如果您不打算在视图中添加/删除IEnumerable对象中的项目(这通常不是一个好主意,将您的逻辑保留在视图之外,只是在那里显示数据),您可以简单地迭代结果foreach循环。