如何将匿名列表从静态方法传递给调用方法?

时间:2016-06-08 15:08:23

标签: c# json asp.net-mvc anonymous-types jsonresult

public JsonResult GetReport(string reportSelected, string firstDateGiven)
        {
            _context = new ReportDB();

            var theResults =
                    miPolicyTransactions.Select(
                        x =>
                            new
                            {
                                PolicyReference = x.PolicyReference,
                                TransactionType = x.TransactionType
                                ...
                                }).ToList();

                var theadColumns = new[]
                {
                    new {columnName = "Policy Reference"},
                    new {columnName = "Transaction Code"}
                    ...
                }.ToList();

                return Json(new { data = theResults, columns= theadColumns }, JsonRequestBehavior.AllowGet);
            }

以上是我开始使用的内容,但我使用了字典功能来简化调用并创建其他内容。

private Dictionary<string, Func<IReportDB, string, JsonResult>> functions = new Dictionary<string, Func<IReportDB, string, JsonResult>>
                {
                    {  "New Business by Agent last 3 Months(set)", NewBusinessAgentLast3Month},                   

                    {  "New Business by Agent last 7 days  (set)", SomeOtherMethodName}
                    };

 private static JsonResult NewBusinessAgentLast3Month(IReportDB context, string parameters)
        {

        _context = new ReportDB();

        var theResults =
                miPolicyTransactions.Select(
                    x =>
                        new
                        {
                            PolicyReference = x.PolicyReference,
                            TransactionType = x.TransactionType
                            ...
                            }).ToList();

            var theadColumns = new[]
            {
                new {columnName = "Policy Reference"},
                new {columnName = "Transaction Code"}
                ...
            }.ToList();

            return ??????????????????????????

我收到错误时无法返回Json对象

  

非静态字段方法需要对象引用,   属性。无法在静态上下文中访问非静态Json。

我可以避免创建具有每个具体类型列表的具体类型,但仍然将两个匿名列表传递给调用方法,然后将其作为JsonResult返回,该JsonResult在我的Jquery文件中使用?你会使用List还是有另一种方式?

1 个答案:

答案 0 :(得分:1)

您应该更改功能(例如NewBusinessAgentLast3Month)以返回object。然后,您应该将此值传递给Controller.Json方法,该方法将创建一个可以从控制器返回的JsonResult

您的代码中的问号应替换为您在重构之前使用的相同匿名类型。