Я работаю с .NET4.5 и VS2013, у меня есть этот запрос, который получает результат dynamic
из db.
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>>();
, что второй оператор разрешен компилятором?
Почему компилятор не позволяет LINQ выбирать, но разрешает для каждого <? >