【问题标题】:Sum on a dynamic list that has ExpandoObject as items在以 ExpandoObject 作为项目的动态列表上求和
【发布时间】:2016-01-12 09:11:52
【问题描述】:

我有一个以 ExpandoObject 作为项目的动态列表:

List<dynamic> list = new List<dynamic>();
foreach (...)
{
    var dynamicObject = new ExpandoObject() as IDictionary<string, Object>;

    ...
    list.Add(dynamicObject);
}

如何在动态列表中使用 .Sum() ?我知道物业的名称 该列表中,但Sum() 不将字符串作为参数。

谢谢

【问题讨论】:

    标签: c# .net visual-studio visual-studio-2013 dynamic


    【解决方案1】:

    假设你有这样的列表:

    var list = new List<dynamic>
    {
        new ExpandoObject(),
        new ExpandoObject(),
        new ExpandoObject(),
    };
    
    list[0].Foo = 1;
    list[1].Foo = 2;
    list[2].Foo = 3;
    

    您可以将ExpandoObject 的属性用作常规属性,如果它们的名称在编译时已知:

    var sum1 = list
        .Sum(item => item.Foo);
    

    如果属性名称仅在运行时已知,则使用字典语法:

    var sum2 = list
        .Sum(item => (int)((IDictionary<string, object>)item)["Foo"]);
    

    【讨论】:

      【解决方案2】:

      你可以使用Sum(Func&lt;TSource, int&gt; selector)

      为你举例:

              var values = new int[] {1, 2, 3, 4, 5};
              List<dynamic> list = new List<dynamic>();
              foreach (var value in values)
              {
                  var dynamicObject = new ExpandoObject() as IDictionary<string, Object>;
                  dynamicObject[value.ToString()] = value;
                  list.Add(dynamicObject);
              }
              // Kind of ugly as cast but otherwise it has trouble to find the Count property
              var result = list.Sum(x => (x as IDictionary<string, Object>).Count);
              Console.WriteLine("Result: {0}", result);
              Console.ReadLine();
      

      【讨论】:

        【解决方案3】:

        在我看来你可以试试这个:

         var listSum = list.Sum(item => item.GetType().GetProperty("propertyName").GetValue());
        

        我调用了 list 你想调用 Sum 方法的列表。

        如果结果是你想要的,请告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多