OrderBy Linq.Expression as parameter = (Of Func(Of T,IComparable)) to perform LinqToEntity is not working
- by NicoJuicy
I'd like to get this working:
Call: (Count & Page are used for pagination, so Count = 20 and Page = 1 for example, for the first 20 values). Sorting should be by name
LeverancierService.GetLeveranciers(Function(el) el.Name, Count, Page)
Equivalent in c#:
LeverancierService.GetLeveranciers(el= el.Name, Count, Page)
Method that gives an error (parameters shown above):
Public Overridable Function GetAllPaged(orderby As Expression(Of Func(Of T, IComparable)), ByVal Count As Integer, ByVal Page As Integer) As IEnumerable(Of T)
Return dbset.OrderBy(orderby).Skip((Page - 1) * Count).Take(Count).ToList()
End Function
Already tried changing it to this, but it gives the same error:
Public Overridable Function GetAllPaged(Of TOrderBy)(orderby As Expression(Of Func(Of T, TOrderBy)), ByVal Count As Integer, ByVal Page As Integer) As IEnumerable(Of T)
Return dbset.OrderBy(orderby).Skip((Page - 1) * Count).Take(Count).ToList()
End Function
Error:
Unable to cast the type 'System.String' to type 'System.IComparable'. LINQ to Entities only supports casting Entity Data Model primitive types.
Any idea how to do this?
Extra info:
I'm in a DDD-layered application, so the parameter should stay the same as the called method is an overridden interface (eg. if i change this, i have to do this for 200 times or so, because it's in VB.Net and not in C# (= 1 change) )
I know there is a way to change the expression to a string and then use DLinq (= Dynamic Linq), but that's not how it should be.