【问题标题】:LINQ GroupBy a List according to a key inside dictionary inside dictionary inside List C#LINQ GroupBy a List 根据 List C# 内字典内字典内的键
【发布时间】:2013-09-23 13:28:40
【问题描述】:

我正在创建一个列表,其中包含用于从 wcf 服务创建 Json 的字典。

我是这样创作的:

List<Dictionary<string, Dictionary<string, Object>>> superduperList = new List<Dictionary<string, Dictionary<string, Object>>>();

我用数据填充它,Json 看起来像这样:

[
{
DepartureJ: {},
ReturnJ: {},
pricesDepartureJ: {},
pricesReturnJ: {},
DepartureSegmentsJ: {},
ArrivalSegmentsJ: {}
},
...,
...,
...,
...,
...,
]

起始数组是列表

第一个对象是字典词典 并且第一个字典中的对象再次是具有键/值对字符串/对象的字典 (我使用对象,因为类型可以是 bool 或 int 或字符串) 现在最后一级的字典看起来像这样:

   "DepartureJ": {
        ArrivalDateTime: "2013-09-27T12:15:00",
        ArrivalDateTime_str: "12:15",
        StopQuantity: 0,
        StopQuantity_str: "Direct",
        TotalDuration: "50",
        TotalDuration_str: "0h 50mins",
        SeatsRemaining_str: "2",
        NoBag_str: "",
        NonRefundable: true,
        NonRefundable_str: "Non Refundable",
        FareBasisCode: "xxx-",
        RoutingId: "",
        GroupCompStr: "ATH-SKG-1xxxxxx-UOWA3--0",
        LineCompStr: "-2013-09xxxxxxxxxxxxxxxxxxxxxA3--3,0000000-1-0--",
        TotalAmount_From_Prices: 136.64
    }

现在我的问题是如何从位于列表中每个项目的每个字典的字典中的键 TotalAmount_From_Prices 中对外部列表进行排序?

我尝试使用带有 LINQ 的 groupby 但无法正常工作或不知道如何:s

superduperList.GroupBy(each_result=> each_result["DepartureJ"]["TotalAmount_From_Prices"]);

如果我创建一个新列表或更改现有列表就可以了。

【问题讨论】:

  • 您是只想对内部字典进行排序,还是外部字典也需要进行排序?含义...如果外部包含 Dict1 和 Dict2,Dict1 包含 TotalAmount val 1, 2 并且 Dict 2 包含 val 3, 1... 结果应该是什么,只是包含排序的 Dict1 (1, 2) 和 Dict ( 1, 3) 或者您是否也尝试对外部字典进行排序?
  • 我只想对外部列表进行排序,但取决于内部/内部字典的键,并且字典是特定的
  • 您的字典包含对象,因此您需要将值转换为双精度值。在将 json 解析为数据结构时,您还需要确保它以双精度形式存储。
  • 我会试试的。我怎么把它加倍?与(双)?或 convert.ToDouble() ?而且它总是用 double 填充这个值,所以没关系。

标签: c# linq dictionary


【解决方案1】:

其实我是用不同的方式做的。

我创建了一个自定义类来保存数据,如下所示:

public class each_flight
{
    public Dictionary<string, object> DepartureJ = new Dictionary<string, object>();
    public Dictionary<string, object> ReturnJ = new Dictionary<string, object>();
    public Dictionary<string, object> pricesDepartureJ = new Dictionary<string, object>();
    public Dictionary<string, object> pricesReturnJ = new Dictionary<string, object>();
    public Dictionary<string, object> DepartureSegmentsJ = new Dictionary<string, object>();
    public Dictionary<string, object> ArrivalSegmentsJ = new Dictionary<string, object>();

    public double total_price;

}

然后我创建了:

List<each_flight> flights = new List<each_flight>();

然后我填充了列表中的对象,然后用额外的双倍总价格对它们进行了如下排序:

List<each_flight> Fligths_sorted = flights.OrderBy(o => o.total_price).ToList();

现在可以了 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多