在具有ExpandoObject作为项的动态列表上求和
本文关键字:动态 列表 求和 ExpandoObject | 更新日期: 2023-09-27 18:29:52
我有一个以ExpandoObject为项目的动态列表:
List<dynamic> list = new List<dynamic>();
foreach (...)
{
var dynamicObject = new ExpandoObject() as IDictionary<string, Object>;
...
list.Add(dynamicObject);
}
如何在动态列表中使用.Sum()?我知道这些房产的名字但Sum()
不将字符串作为参数。
感谢
假设您有这样的列表:
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"]);
您可以使用Sum(Func<TSource, int> 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();
在我看来,你可以试试这个:
var listSum = list.Sum(item => item.GetType().GetProperty("propertyName").GetValue());
我调用了list,即您要调用Sum方法的列表。
如果结果是你想要的,请告诉我。