【问题标题】:Not able to Returning an Anonymous type无法返回匿名类型
【发布时间】:2011-06-30 14:13:58
【问题描述】:

我有以下功能,返回匿名类型

public IQueryable<TabMasterViewModel> GetJsonTabMasterList(string OrderByColumn, string OrderType, int PageSize, int CurrentPage)
        {
            IQueryable<TabMaster> tabmasters = _tabmasterRepository.GetQueryable().OrderUsingSortExpression(OrderByColumn + " " + OrderType).Skip((CurrentPage - 1) * PageSize).Take(PageSize);
            var jsonData = new
            {
                total = 1,//totalPages,
                page = 1,//page,
                records = 14, //totalRecords,
                rows = (from tm in tabmasters
                        select new
                        {
                            id = tm.colID,
                            cell = new string[] { tm.colID.ToString(), tm.FirstName, tm.LastName }
                        }).ToArray()
            };
            return jsonData;
        }

但它会给我以下错误: 无法将类型“AnonymousType#1”隐式转换为 'System.Linq.IQueryable'

我对在下一行定义返回类型函数感到困惑

public IQueryable<TabMasterViewModel> ...

【问题讨论】:

  • 将您的返回类型更改为object
  • 但现在我收到新错误: LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且此方法无法转换为商店表达。在下一行 cell = new string[] { tm.colID.ToString(), tm.FirstName, tm.LastName }
  • 首先您必须检查您的 LINQ 查询是否正常工作。尝试将tm.colID.ToString() 替换为tm.colID
  • 是的,我的 LINQ 查询工作正常。我更新了 tm.colID 的代码。但问题仍然存在..

标签: asp.net asp.net-mvc-3


【解决方案1】:

如果你想要某种类型,你可以创建一个名为

的类或结构 public class TabMasterDataInfo { public int Total {get;set;} public int Page {get;set;} public int Records {get;set;} public IEnumerable Rows {get;set;} }

然后

var jsonData = new TabMasterDataInfo() { Total = 1,//totalPages, Page = 1,//page, Records = 14, //totalRecords, Rows = (from tm in tabmasters select new { id = tm.colID, cell = new string[] { tm.colID.ToString(), tm.FirstName, tm.LastName } }).ToArray() };

然后你的方法返回然后输入 TabMasterDataInfo

公共 TabMasterDataInfo GetJsonTabMasterList(字符串 OrderByColumn,字符串 OrderType,int PageSize,int CurrentPage)

无论如何,这是一个粗略的想法。假设你想要一个类型返回(我更喜欢'object' - 那时没有猜测并且它是强类型的。

【讨论】:

  • 感谢您的回复。我根据你的更新了代码,但仍然存在以下错误:LINQ to Entities does not identify the method 'System.String ToString()' method, and this method cannot be translate into a store expression.
  • 使用 Convert.ToString(tm.colID) 代替 tm.colID.ToString()。 Linq 不喜欢 .ToString() 那里。
  • 当您使用我的解决方案时会发生什么?
【解决方案2】:

以下是解决方案:

public JsonResult GetGridData(string sidx, string sord, int rows, int page)
        {
            int totalRecords = Convert.ToInt32(_tabmasterService.Count());
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)rows);
            IQueryable<TabMasterViewModel> tabmasters = _tabmasterService.GetQueryTabMasterList(sidx, sord, rows, page);
            var jsonData = new
            {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = (from tm in tabmasters
                        select new
                        {
                            id = tm.colID,
                            cell = new string[] { tm.colID.ToString(), tm.FirstName, tm.LastName }
                        }).ToArray()
            };
            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    相关资源
    最近更新 更多