EF4 CTP5 - LINQ动态查询库抛出InvalidCastException

时间:2010-12-13 17:56:42

标签: linq entity-framework-4

升级到EF4 CTP5后,之前正在使用的(使用CTP4)LINQ动态查询库会抛出以下异常

无法将类型为“System.Data.Entity.Infrastructure.DbQuery”的对象强制转换为“System.Linq.IQueryable .1 [KIT.TAM.Core.Entities.TravelAgent]”。

在下面的退货声明中:

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的库的更新版本?

谢谢大家。

1 个答案:

答案 0 :(得分:4)

解决了这个问题。在DynamicLibrary.cs中:

我已取代

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

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 Where(this IQueryable source, string predicate, params object[] values)

但已将source.Provider.CreateQuery()更改为source.Provider.CreateQuery<T>

您还必须为静态方法OrderBy<T>执行此操作。