我试图执行以下操作
int myObject = getValues(someVar).Sum(x => Int32.Parse(x.Price))
该功能看起来像这样:
List<dynamic> getValues(string something) {...}
这是我收到的错误: &#34;不能将lambda表达式用作动态调度操作的参数&#34;
如何在类似于LINQ SUM?
的链式调用中求和List对象的值答案 0 :(得分:4)
您的代码有效。您遇到的问题不在您发布的代码中。此代码运行。
void Main() {
int myObject = getValues("12").Sum(x => Int32.Parse(x.Price));
Console.WriteLine (myObject);
}
List<dynamic> getValues(string something) {
var item = new { Price = something };
IEnumerable<dynamic> items = Enumerable.Repeat<dynamic>(item, 2);
return items.ToList();
}
这会产生输出24
。问题可能与类型推断有关,但这只是猜测。您应该包含足够的代码来重现错误,以获得更可靠的答案。
答案 1 :(得分:1)
正如评论中所提到的,这段代码对我来说很好: -
public static void Main()
{
var result = GetData("test").Sum(x => int.Parse(x.Name));
Console.WriteLine(result);
}
public static List<dynamic> GetData(string x)
{
List<dynamic> data = new List<dynamic>
{
new { Id =1, Name ="1"},
new { Id =2, Name ="4"},
new { Id =3, Name ="5"}
};
return data;
}
我收到10
作为输出。
答案 2 :(得分:1)
所以它最终证明了问题是我将动态变量传递给函数调用并随后使用LINQ / lambda。好像那是编译器禁止......
dynamic someVar = new {a=1,b=2};
int myObject = getValues(someVar.a).Sum(x => Int32.Parse(x.Price))
答案 3 :(得分:0)
您的getValues
方法返回的是dynamic
,而不是List<dynamic>
。要么更改方法签名,要么从结果中构建new List<dynamic>(...)
。
dynamic list = new [] {new{Price = "1"},new{Price = "2"}};
// This produces the error you're describing:
Console.WriteLine(list.Sum(x => Int32.Parse(x.Price)));
// This works.
Console.WriteLine(new List<dynamic>(list).Sum(x => Int32.Parse(x.Price)));