2010-12-13 4 views
4

Avec la mise à niveau EF4 CTP5, le travail précédemment (avec CTP4) LINQ requête dynamique Library lance l'exception suivanteEF4 CTP5 - LINQ requête dynamique Library lance InvalidCastException

Impossible de jeter l'objet de type « System.Data. Entity.Infrastructure.DbQuery 'pour taper' System.Linq.IQueryable`1 [KIT.TAM.Core.Entities.TravelAgent] '.

sur la déclaration de retour ci-dessous:

namespace System.Linq.Dynamic 
{ 
    public static class DynamicQueryable 
    { 
     public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values) 
     { 
      return (IQueryable<T>)Where((IQueryable)source, predicate, values); 
     } 
    } 
} 

est-il une version mise à jour de la bibliothèque qui fonctionne avec EF4 CTP5?

Merci à tous.

Répondre

4

Résolu celui-ci. En DynamicLibrary.cs:

J'ai remplacé

public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values) 
{  
    return (IQueryable<T>)Where((IQueryable)source, predicate, values); 
} 

avec

public static IQueryable<T> Where<T>(this IQueryable<T> source, string predicate, params object[] values) 
{ 
    if (source == null) throw new ArgumentNullException("source"); 
    if (predicate == null) throw new ArgumentNullException("predicate"); 
    LambdaExpression lambda = DynamicExpression.ParseLambda(source.ElementType, typeof(bool), predicate, values); 
    return source.Provider.CreateQuery<T>(
     Expression.Call(
      typeof(Queryable), "Where", 
      new Type[] { source.ElementType }, 
      source.Expression, Expression.Quote(lambda))); 
} 

C'est essentiellement le même code dans

public static IQueryable Where(this IQueryable source, string predicate, params object[] values) 

mais changé source.Provider.CreateQuery() à source.Provider.CreateQuery<T>. Vous devrez également faire cela pour la méthode statique OrderBy<T>.

+1

Veuillez mettre en forme ce code. – StriplingWarrior

+0

Sauvé ma journée, merci beaucoup! – zvolkov