不能将lambda表达式用作动态调度操作的参数

时间:2015-04-20 17:04:33

标签: c# linq dynamic lambda

我试图执行以下操作

int myObject = getValues(someVar).Sum(x => Int32.Parse(x.Price))

该功能看起来像这样:

List<dynamic> getValues(string something) {...}

这是我收到的错误: &#34;不能将lambda表达式用作动态调度操作的参数&#34;

如何在类似于LINQ SUM?

的链式调用中求和List对象的值

4 个答案:

答案 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)));