升级到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的库的更新版本?
谢谢大家。
答案 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>
执行此操作。