我试图在重写Gridview函数中运行Linq语句的Count()函数。基本上,我希望能够将一个linq查询分配给一个gridview,并且在我的新扩展gridview中的OnDataBound(e)事件中使用IQueryable检索计数。动态运行IQueryable方法
所以,我需要动态地将GridView.DataSource转换为我的LinqToSql IQueryable对象,以便我可以对它执行Count()函数。
这是我在哪里至今:
protected override void OnDataBound(EventArgs e)
{
IEnumerable _data = null;
if (this.DataSource is IQueryable)
{
_data = (IQueryable)this.DataSource;
}
System.Type dataSourceType = _data.GetType();
System.Type dataItemType = typeof(object);
if (dataSourceType.HasElementType)
{
dataItemType = dataSourceType.GetElementType();
}
else if (dataSourceType.IsGenericType)
{
dataItemType = dataSourceType.GetGenericArguments()[0];
}
else if (_data is IEnumerable)
{
IEnumerator dataEnumerator = _data.GetEnumerator();
if (dataEnumerator.MoveNext() && dataEnumerator.Current != null)
{
dataItemType = dataEnumerator.Current.GetType();
}
}
Object o = Activator.CreateInstance(dataItemType);
object[] objArray = new object[] { o };
RowCount = (int)dataSourceType.GetMethod("Count").Invoke(_data, objArray);
任何想法?我对使用IQueryables和Linq非常了解,所以我可能会离开。我怎样才能让我的_data允许我运行Count函数?
您有一个数据源实例,但您仍然在其类型上动态调用“固定”方法。为什么? – Slavo 2010-04-01 14:00:49
最后3行只是我在刺探这整个事情... – Micah 2010-04-01 14:08:55