Я працюю з .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, а дозволяє кожен з них?
topAgents
повинно бутиdynamic
? Це працює, якщо ви використовуєтеvar
замість цього?