J'essaie d'exécuter la fonction Count() d'une instruction Linq dans une fonction Gridview redéfinie. Fondamentalement, je veux être capable d'assigner une requête linq à un gridview, et sur l'événement OnDataBound (e) dans ma nouvelle grille étendue, il récupère le compte, en utilisant le IQueryable. Donc, j'ai besoin de lancer dynamiquement le GridView.DataSource à mon objet LinqToSql IQueryable afin que je puisse exécuter la fonction Count() par rapport à cela.Exécuter dynamiquement IQueryable, méthode
C'est là que je suis à ce jour:
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);
Toutes les idées? Je suis vraiment nouveau avec travailler avec IQueryables et Linq, donc je peux être loin. Comment puis-je obtenir mes données pour me permettre d'exécuter la fonction Count?
Vous avez une instance de la source de données, mais vous continuez d'appeler dynamiquement une méthode "fixe" sur son type. Pourquoi? – Slavo
Ces 3 dernières lignes ne sont que des coups de poignard pour toute cette affaire ... – Micah