c# - Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type -
i working .net4.5 , vs2013, have query gets dynamic
result db.
dynamic topagents = this._datacontext.sql( "select t.create_user_id \"user\", sum(t.netamount) \"amount\" transactiondetail t t.update_date > sysdate -7 group t.create_user_id") .querymany<dynamic>();
following statement fails compilation error cannot use lambda expression argument dynamically dispatched operation without first casting delegate or expression tree type
without allowing me run it
topagents.tolist().select(agent => new { user = agent.user != null ? string.format("{0}", agent.user).replace("corpntgb\\", "") : null, amount = agent.amount });
while 1 foreach
works fine.
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 }); }
in eyes after topagents.tolist()
interpreted equivalent, because explicitly state var data = new list<list<object>>();
second statement allowed compiler?
why doesn't compiler allow linq select, allows each`?
the problem topagents
dynamic
- tolist()
call dynamic, , select
. has issues that:
- you can't use lambda expressions dynamic calls this;
- dynamic calls don't find extension methods anyway.
fortunately, operations don't need dynamic because element type dynamic. use:
ienumerable<dynamic> topagents = ...;
... or use var
. both of should fine.
Comments
Post a Comment