我試圖在重寫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