C# 如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将其用作动态调度操作的参数
我正在使用.NET4.5和VS2013,我有一个查询,它从数据库中获取C# 如果不首先将lambda表达式强制转换为委托或表达式树类型,则无法将其用作动态调度操作的参数,c#,linq,lambda,.net-4.5,C#,Linq,Lambda,.net 4.5,我正在使用.NET4.5和VS2013,我有一个查询,它从数据库中获取动态结果 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") .
动态
结果
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>();
而这个带有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
});
}
var data=newlist();
foreach(topAgents中的动态代理)
{
添加数据(新列表)
{
agent.User!=null?string.Format(“{0}”,agent.User).Replace(“CORPNTGB\\”,“”):null,
代理,金额
});
}
在我看来,在我topAgents.ToList()
之后,它们可以被解释为等价的,是因为我明确声明var data=new List()代码>编译器是否允许第二条语句
为什么编译器不允许LINQ select,但允许每个`?问题是topAgents
是动态的
——因此您的ToList()
调用是动态的,select
也是动态的。有以下问题:
不能对这样的动态调用使用lambda表达式李>
动态调用无论如何都找不到扩展方法
幸运的是,操作不需要是动态的,因为元素类型是动态的。您可以使用:
IEnumerable<dynamic> topAgents = ...;
IEnumerable TopAgent=。。。;
。。。或者只使用var
。这两个都可以。顶级代理是否必须是动态的?如果改用var
是否有效?谢谢,我不知何故一直没有看到topAgents
是dynamic
。
IEnumerable<dynamic> topAgents = ...;