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



我正在为我的模型使用一个存储库,比如这个

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>进行上行广播。除了这个,还有别的选择吗?

更新:我放弃了铸造,我将发送一个类型化的对象,而不是匿名的,谢谢大家

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

Skeet给出的答案是:为什么匿名类型不能在方法之间传递?

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

我之所以这么认为,是因为您可能希望访问在代码中其他地方的函数中创建的匿名类型的字段。

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

最新更新