the*_*e_V 4 .net linq dynamic c#-4.0
我正在试图弄清楚如何使用动态变量来处理使用LINQ查询的方法.例如,这很好:
using (DBDataContext db = new DBDataContext())
{
var query = from c in db.Users
select
new
{
c.Firstname,
c.Lastname,
c.Age
};
gridUsers.VirtualItemCount = query.Count();
gridUsers.DataSource = query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
using (DBDataContext db = new DBDataContext())
{
dynamic query = from c in db.Users
select
new
{
c.Firstname,
c.Lastname,
c.Age
};
gridUsers.VirtualItemCount = query.Count();
gridUsers.DataSource = query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
错误是:'object'不包含'Count'的定义.如何使用动态关键字?
Jon*_*eet 10
你必须使用:
gridUsers.VirtualItemCount = Queryable.Count(query);
gridUsers.DataSource = Enumerable.ToList(query);
Run Code Online (Sandbox Code Playgroud)
动态类型不"做"扩展方法.(我不完全确定原因.编译器存储了大量关于调用站点的信息 - 它using基本上也必须存储与调用站点相关的所有指令.它还会减慢动态绑定,这可能是他们试图避免的问题.也许这只是为了太少的利益而做的太多工作.)
编辑:只是出于兴趣,为什么你首先尝试使用动态类型为您的序列?我怀疑你会发现像这样的各种事情变得更加棘手...... LINQ在很大程度上依赖于各种类型推断.
注意,有一个IQueryable<dynamic>或一个IEnumerable<dynamic>是好的,并将更好地工作.