无法首先将其转换为委托或expression式树types,不能将lambdaexpression式用作dynamic调度操作的参数
我正在使用.NET4.5和VS2013,我有这个查询从数据库获取dynamic
结果。
dynamic topAgents = this._dataContext.Sql( "select t.create_user_id as \"User\", sum(t.netamount) as \"Amount\" from transactiondetail t where t.update_date > sysdate -7 group by t.create_user_id") .QueryMany<dynamic>();
以下语句失败,编译错误Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
,甚至不允许我运行它
topAgents.ToList().Select(agent => new { User = agent.User != null ? string.Format("{0}", agent.User).Replace("CORPNTGB\\", "") : null, Amount = agent.Amount });
而这个与foreach
工作就好了。
var data = new List<List<object>>(); foreach (dynamic agent in topAgents) { data.Add(new List<object> { agent.User != null ? string.Format("{0}", agent.User).Replace("CORPNTGB\\", "") : null, agent.Amount }); }
在我眼前我topAgents.ToList()
他们可以被解释为等价的,是因为我明确指出, var data = new List<List<object>>();
那第二个陈述是编译器允许的?
为什么不编译允许LINQselect,但允许每个“?
问题是topAgents
是dynamic
– 所以你的ToList()
调用是dynamic的, Select
。 这有以下问题:
- 你不能像这样使用lambdaexpression式进行dynamic调用;
- dynamic调用无论如何都找不到扩展方法。
幸运的是,仅仅因为元素types是dynamic的,操作不需要是dynamic的。 你可以使用:
IEnumerable<dynamic> topAgents = ...;
…或者只是使用var
这两个都应该没问题。
- InvokeAsync和WPF Dispatcher的BeginInvoke之间有什么区别
- 在.NET 4.5中,我可以在C#5中做什么,而在.NET 4中,我无法在C#4中做这些?
- C#中“return await”的目的是什么?
- 在.NET 4.0中创build一个可以与.NET 4.5中的“await”一起使用的asynchronous方法
- 为什么会find一个types的初始化器抛出一个NullReferenceException?
- 我在哪里可以下载用于构build服务器的.NET 4.5 Multitargeting Pack?
- 使用.NET 4.5 HttpClient的代理
- 在TeamCity中包含NuGet包
- 在C#5中,foreach是否使用了variables?