C# 尝试从xml文件创建列表时出现InvalidCastException

C# 尝试从xml文件创建列表时出现InvalidCastException,c#,xml,dataset,C#,Xml,Dataset,我正在尝试使用MVC在web应用程序中创建一个表,该应用程序从xml文件中读取信息。我试图在将此列表发送回控制器之前对其进行排序,但在我的orderby行上存在InvalidCastException。我做错了什么 string xmlData = HttpContext.Current.Server.MapPath("~/App_Data/HighScores.xml"); DataSet ds = new DataSet(); ds.ReadXml(xmlData); var scores

我正在尝试使用MVC在web应用程序中创建一个表,该应用程序从xml文件中读取信息。我试图在将此列表发送回控制器之前对其进行排序,但在我的orderby行上存在InvalidCastException。我做错了什么

string xmlData = HttpContext.Current.Server.MapPath("~/App_Data/HighScores.xml");
DataSet ds = new DataSet();
ds.ReadXml(xmlData);
var scores = new List<ExternalScoreModel>();

try
{
    scores = (from r in ds.Tables[0].AsEnumerable()
              orderby r.Field<Int32>("Score") descending
              select new ExternalScoreModel
              {
                  Score = Convert.ToInt32(r[0]),
                  FirstName = r[1].ToString(),
                  LastName = r[2].ToString(),
              }).ToList();
}
catch (IndexOutOfRangeException e)
{
    //TODO
}
return scores;
“Score”列中的数据很可能不是Int。请仔细检查XML文件中的数据。该值也可能丢失或为空,在这种情况下,您可以执行如下操作,并将分数指定为0或其他任何您想要的值

 orderby r.Field<Int32?>("Score") == null ? 0 : r.Field<Int32>("Score") descending
orderby r.Field(“分数”)==null?0:r.字段(“分数”)递减
在“分数”列中的数据很可能不是整数。请仔细检查XML文件中的数据。该值也可能丢失或为空,在这种情况下,您可以执行如下操作,并将分数指定为0或其他任何您想要的值

 orderby r.Field<Int32?>("Score") == null ? 0 : r.Field<Int32>("Score") descending
orderby r.Field(“分数”)==null?0:r.字段(“分数”)递减

您的xml数据看起来像什么?如果我不得不冒险猜测:“Score”被存储为字符串,因此
r.Field(“Score”)
失败,因为没有可用的强制转换。您必须在使用
Convert.ToInt…
后进行排序。为什么不使用LinqToXML而不是所有这些数据集?您应该将您的“fixed it”部分变成一个单独的答案,以便具有相同问题的其他人知道解决方案。您的xml数据看起来像什么?如果我不得不冒险猜测:“Score”将存储为字符串,因此
r.Field(“Score”)
失败,因为没有可用的强制转换。您必须在使用
Convert.ToInt…
后进行排序。为什么不使用LinqToXML而不是所有这些数据集?您应该将您的“fixed it”部分变成一个单独的答案,以便具有相同问题的其他人知道解决方案。您的xml数据看起来像什么?如果我不得不冒险猜测:“Score”将存储为字符串,因此
r.Field(“Score”)
失败,因为没有可用的强制转换。在使用
Convert.ToInt…
之后,您必须进行排序。为什么不使用LinqToXML而不是所有这些数据集胡闹?您应该将“修复它”部分变成一个单独的答案,以便具有相同问题的其他人知道解决方案。您是对的,“Score”中的数据最初是一个字符串,稍后我将其转换为int。但实际上,在你回复我之前,我就已经弄明白了,我只是把orderby r.Field(“Score”)降序取出来,然后在.ToList()之前添加了一个.OrderByDescending,这同样有效。您也可以将它作为字符串保存,并按分数排序,但它仍然应该正确排序。@LoganGilmore这个答案有用吗?是的,我以前不完全理解如何正确使用它,但现在我有了更好的理解。我只是使用了我找到的修复方法,但我同意你的方法肯定也会起作用。谢谢@animalstyle你是对的,“Score”中的数据最初是一个字符串,后来我将其转换为int。但实际上,在你回复我之前,我就已经弄明白了,我只是把orderby r.Field(“Score”)降序取出来,然后在.ToList()之前添加了一个.OrderByDescending,这同样有效。您也可以将它作为字符串保存,并按分数排序,但它仍然应该正确排序。@LoganGilmore这个答案有用吗?是的,我以前不完全理解如何正确使用它,但现在我有了更好的理解。我只是使用了我找到的修复方法,但我同意你的方法肯定也会起作用。谢谢@animalstyle你是对的,“Score”中的数据最初是一个字符串,后来我将其转换为int。但实际上,在你回复我之前,我就已经弄明白了,我只是把orderby r.Field(“Score”)降序取出来,然后在.ToList()之前添加了一个.OrderByDescending,这同样有效。您也可以将它作为字符串保存,并按分数排序,但它仍然应该正确排序。@LoganGilmore这个答案有用吗?是的,我以前不完全理解如何正确使用它,但现在我有了更好的理解。我只是使用了我找到的修复方法,但我同意你的方法肯定也会起作用。谢谢@AnimalStyle