【问题标题】:How to order a list using the child dictionary inside using Linq?如何使用 Linq 在里面使用子字典对列表进行排序?
【发布时间】:2021-01-11 09:18:09
【问题描述】:
public class A {
  public string Name {get; set;}
  public Dictionary<string, decimal> B {get; set;}
}

如何使用 B 中的值订购列表? 示例:

var list = new List<A>(){
  new A(){
    Name = "data1",
    B = new Dictionary<string, decimal>()
      {"QTY", 10},
      {"PRICE", 20}
  },
  new A(){
    Name = "data2",
    B = new Dictionary<string, decimal>()
      {"QTY", 100},
      {"PRICE", 200}
  },
};

**我想按“数量”升序对列表进行排序。

【问题讨论】:

  • 这是可能的还是需要先进行一些转换?
  • 如果您希望class A 中每个字典的每个实例中只有一个条目,那么您需要KeyValuePair&lt;string, decimal&gt; 类型的属性而不是Dictionary&lt;string, decimal&gt;。如果您打算有多个条目,请不要介意我的评论。

标签: c# linq sorting dictionary


【解决方案1】:

检查值并确保键存在于字典中

 var sortONPrice = list.OrderBy(x => x.B.ContainsKey("QTY") ? x.B["QTY"]:0);

如果没有,则提供一个值,我选择零,但它可以是任意值。

【讨论】:

    【解决方案2】:

    假设你有一个var list = new List&lt;A&gt;(),你想要

    var ordered = list.OrderBy(x => x.B.First(xx => xx.Key == "QTY").Value);
    

    这当然不包括任何空值检查或对您的字典进行检查以验证密钥 QTY 是否存在。如果您不确定 QTY 是否存在于所有项目上,您将需要 FirstOrDefault 而不是 First,并相应地进行处理。

    【讨论】:

    • 这个答案是正确的,但我不喜欢它,因为它没有利用 Dictionary 类的力量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多