2010-12-13 9 views
4

をスローLINQ動的なクエリライブラリは、次の例外EF4 CTP5 - LINQ動的なクエリライブラリ(CTP4付き)EF4 CTP5、以前に作業へのアップグレードではInvalidCastExceptionが

型「System.Dataのオブジェクトをキャストすることができませんがスローされます。 Entity.Infrastructure.DbQuery 'を入力して' System.Linq.IQueryable`1 [KIT.TAM.Core.Entities.TravelAgent] 'と入力します。下のreturn文に

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); 
     } 
    } 
} 

はEF4 CTP5で動作するライブラリの更新バージョンはありますか?

ありがとうございました。

答えて

4

解決済みです。 DynamicLibrary.csで:

私はこれが

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

で基本的には同じコードであるだけにsource.Provider.CreateQuery()を変更

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))); 
} 

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

を置き換えますsource.Provider.CreateQuery<T>

また、静的メソッドOrderBy<T>に対してもこれを行う必要があります。

+1

このコードをフォーマットしてください。 – StriplingWarrior

+0

私の一日を保存しました、ありがとうございました! – zvolkov

関連する問題