我有一个返回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? 感谢
答案 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(),
});
此外,我强烈建议使用列名而不是索引以避免将来混淆。
希望这有帮助。