在控制器中向上转换IEnumerable <object>?</object>

时间:2012-09-14 09:12:15

标签: c# linq asp.net-mvc-4

我正在为我的模型使用存储库

public IEnumerable<object> GetDetailList(int userId, int page, int rp, string sortname, string sortorder, ref int num, ref int numpg)
{
    var details = (from access in context.erp_sec_companyaccesses
                   join company in context.erp_maint_companies on Convert.ToInt32(access.company_id) equals company.company_id
                   where access.user_id == userId
                   select new
                   {
                       pkey = access.company_access_id,
                       company_access_id = access.company_access_id,
                       company_code = company.company_code,
                       company_name = company.company_name,
                       company_id = company.company_id
                   });

    num = details.Count();
    numpg = (int)Math.Ceiling((float)(num / rp));

    details = details.OrderBy(sortname+" "+sortorder).Skip(page * rp).Take(rp);

    return details;
}

但我正在努力将IEnumerable<object>转发给控制器。除此之外还有其他选择吗?

更新:我放弃向上投射,我会发送一个打字对象而不是匿名对象,谢谢大家

3 个答案:

答案 0 :(得分:0)

你不应该传递匿名对象。我昨天尝试过,并没有找到一个简单的解决方案。因此,最好的办法是为您的数据创建另一个类。

以下是Skeet的回答:Why should anonymous types cannot be passed around methods?

答案 1 :(得分:0)

我猜你可能想要创建一个具体类型,例如Details并从您的函数返回IEnumerable<Details>而不是IEnumerable<object>

我假设这是因为您可能希望访问代码中其他位置的函数内创建的匿名类型的字段。

答案 2 :(得分:0)

为什么不使用Generics并将你想要的Object类型传递给你的方法并返回它?