Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Encountered a similar problem as the original poster, where "Order By" expressions where written as lambdas of the type Expression&lt;Func&lt;T, object&gt;&gt;. These were interpreted correctly by the NHibernate linq provider, but migrating to EF 5 resulted in "Unable to cast the type 'System.DateTime' to type 'System.IComparable'. LINQ to Entities only supports casting Entity Data Model primitive types."</p> <p>The following methods provide a conversion to Expression&lt;Func&lt;T, TKey&gt;&gt; when calling the various "OrderBy" methods (using reflection - apologies...) Note they were originally encapsulated in a generic class OrderBy&lt;T&gt;.</p> <pre><code> private static readonly Type QueryableType = typeof(Queryable); // HACK: Use reflection to call strongly-typed methods instead of object-based methods // This is to work around "Unable to cast the type 'System.DateTime' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types." private IOrderedQueryable&lt;T&gt; ApplyOrderByTo( IQueryable&lt;T&gt; query, Expression&lt;Func&lt;T, object&gt;&gt; keySelector, bool sortAscending, bool useReflection) { if (useReflection) { var body = keySelector.Body as UnaryExpression; var keyExpr = body.Operand as MemberExpression; return (IOrderedQueryable&lt;T&gt;)query.Provider.CreateQuery( Expression.Call( QueryableType, sortAscending ? "OrderBy" : "OrderByDescending", new Type[] { typeof(T), keyExpr.Type }, query.Expression, Expression.Lambda(keyExpr, keySelector.Parameters))); } else { if (sortAscending) return query.OrderBy(keySelector); else return query.OrderByDescending(keySelector); } } // HACK: Use reflection to call strongly-typed methods instead of object-based methods // This is to work around "Unable to cast the type 'System.DateTime' to type 'System.Object'. LINQ to Entities only supports casting Entity Data Model primitive types." private IOrderedQueryable&lt;T&gt; ApplyOrderByTo( IOrderedQueryable&lt;T&gt; query, Expression&lt;Func&lt;T, object&gt;&gt; keySelector, bool sortAscending, bool useReflection) { if (useReflection) { var body = keySelector.Body as UnaryExpression; var keyExpr = body.Operand as MemberExpression; return (IOrderedQueryable&lt;T&gt;)query.Provider.CreateQuery( Expression.Call( QueryableType, sortAscending ? "ThenBy" : "ThenByDescending", new Type[] { typeof(T), keyExpr.Type }, query.Expression, Expression.Lambda(keyExpr, keySelector.Parameters))); } else { if (sortAscending) return query.ThenBy(keySelector); else return query.ThenByDescending(keySelector); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload