首页 > 解决方案 > 为什么从 Dictionary 返回 JsonResult 会更改排序顺序?

问题描述

我有以下控制器操作:

public JsonResult GetInvestors(int bank)
{
    var investors = _context.Investors
    .Where(i => i.BankNumber == bank)
    .Select(i => new { InvestorId = i.InvestorId.ToString(), InvestorName = i.InvestorName + " (" + i.BankNumber + ")" })
    .OrderBy(i => i.InvestorName)
    .ToDictionary(i => i.InvestorId, i => i.InvestorName);

    return Json(investors, JsonRequestBehavior.AllowGet);
}

以下 javascript 调用该操作,现在只是启动调试器,以便我可以浏览结果:

function getInvestors(bank)
{
    $.ajax
    ({
        url: "/InvestorDetail/GetInvestors",
        type: "POST",
        data: { bank: bank },
        dataType: "json",
        success: function (returnedData) { debugger; }
    });
}

如果我在控制器动作中观看investors,它是按投资者名称排序的,这就是我想要的。但是,当我使用 javascript 调试器并 watchreturnedData时,数据按投资者 ID 排序。

或者,如果我将 OrderBy 放在 ToDictionary 之后并按值排序,则在 javascript 调试器中,结果的 json 结构是不同的,但它是按我想要的投资者姓名排序的。

为什么从字典返回时排序顺序会改变?

谢谢你。

标签: javascriptc#jqueryasp.net-mvc

解决方案


您无法对字典进行排序,尽管您可以获得已排序字典的表示!

你可以尝试类似的东西

import collections

Dictionary_Sorted = collections.OrderedDict(x)

x 是具有键值对的对象。

C# 也是如此。

我喜欢通过说将我的字典更改为列表。

var newList = thisDictionary.ToList();
newList.Sort((a,b) => a.Value.CompareTo(b.Value));

我喜欢一个班轮的方法。它简单而优雅。如果您想对其进行降序排序,请按此切换值。

   newList.Sort((a,b) => b.Value.CompareTo(a.Value));

推荐阅读