1

メソッドに提供する動的ソートロジック(こちらを参照)を実装しました。Expression<Func<T, IComperable>>OrderBy

今、EFが実際の型にIComperable変換できないという問題があります。Func<T, IComperable>

型 'System.Int32' を型 'System.IComparable' にキャストできません。LINQ to Entities は、EDM プリミティブ型または列挙型のキャストのみをサポートします。

System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.ValidateAndAdjustCastTypes(TypeUsage toType, TypeUsage fromType, Type toClrType, Type fromClrType)

これを解決する方法はありますか?

現時点で見つけた唯一の方法はFunc<>、 を実際の型として「実装」し、この型を の隣に保存して、リフレクションを介してFunc<>呼び出すことです。OrderBy

public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, Type orderType, object expression)
{
    return typeof(Queryable).GetMethods().First(m => m.Name == "OrderBy")
       .MakeGenericMethod(typeof(T), orderType)
       .Invoke(null, new object[] { source, expression }) as IQueryable<T>
}

しかし、それは私には非常に醜い(そして遅い?)ようで、現在の(残念ながらLINQ to objectsの場合のみ)ソリューションほど使いにくいです...

更新:この問題は、
戻ったときintまたはboolでのみ発生するようです...Func<T, IComperable>string

4

1 に答える 1