如何处理Json对象内的超出异常?

时间:2016-05-25 19:31:48

标签: c# json visual-studio model-view-controller datatable

我有一个返回Json对象的函数,如下所示:

return Json(
                db.Select(c => new GridViewModel()
                {

                    Number = c.Rows[0][0].ToString(),
                    DocId = c.Rows[0][1].ToString(),
                    PartyName = c.Rows[0][2].ToString(),
                    FilingType = c.Rows[0][3].ToString(),
                    FilingDate = c.Rows[0][4].ToString(),

                }

            ).ToDataSourceResult(request));

db是一个DataTable对象,目前我只有一行所以我使用的是index = 0。我继续得到错误按摩,并说"类型&System; .IndexOutOfRangeException'发生在System.Data.dll中但未在用户代码中处理" 有没有办法在Json对象中添加try catch? 感谢

1 个答案:

答案 0 :(得分:0)

DataTable没有.Select(Func<...>)方法。

它有DataTable.Select(string filterExpression),所以它与SQL中的非常相似,例如

Select * from MyTable WHERE Column1 = 'something'

对于DataTable,它将是

var myFilteredRows = myDataTable.Select("Column1 = 'something'")

请访问MSDN了解详情。

根据您的代码,我假设您要在非可枚举对象上使用LINQ Enumerable.Select。这是不可能的:))

所以,如果你有DataSet,那么你可以这样做

DataSet myDataSet = init from database

然后

dataSet.Tables.Cast<System.Data.DataTable>().Select(table => new YourObject
{
   init your object here, to get rows do this
   MyRows = table.Rows.Cast<System.Data.DataRow>().Select(row => MyRowObject
   {
      init row object here
   })
});

如果您只有一个DataTable(不是DataSet) 然后

table.Rows.Cast<System.Data.DataRow>().Select(row => GridViewModel
{
    Number = row[0].ToString(),
    DocId = row[1].ToString(),
    PartyName = row[2].ToString(),
    FilingType = row[3].ToString(),
    FilingDate = row[4].ToString(),           
});

此外,我强烈建议使用列名而不是索引以避免将来混淆。

希望这有帮助。