Vb.net 执行LinqToEntity的OrderBy Linq.Expression as参数=(Of Func(Of T,IComparable))无效

Vb.net 执行LinqToEntity的OrderBy Linq.Expression as参数=(Of Func(Of T,IComparable))无效,vb.net,linq,entity-framework-4,lambda,Vb.net,Linq,Entity Framework 4,Lambda,我想让它工作: DBSet构造函数: dbset = DataContext().[Set](Of T)() 调用:(Count&Page用于分页,例如,对于前20个值,Count=20和Page=1)。排序应按名称进行 LeverancierService.GetLeveranciers(Function(el) el.Name, Count, Page) c#中的等效项: LeverancierService.GetLeveranciers(el=>el.Name、Count、Page)

我想让它工作:

DBSet构造函数:

dbset = DataContext().[Set](Of T)()
调用:(Count&Page用于分页,例如,对于前20个值,Count=20和Page=1)。排序应按名称进行

LeverancierService.GetLeveranciers(Function(el) el.Name, Count, Page)
c#中的等效项: LeverancierService.GetLeveranciers(el=>el.Name、Count、Page)

给出错误的方法(如上所示的参数):

已尝试将其更改为此,但会出现相同的错误:

 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
错误:

 Unable to cast the type 'System.String' to type 'System.IComparable'. LINQ to Entities only supports casting Entity Data Model primitive types.
你知道怎么做吗

额外信息:

我在一个DDD分层应用程序中,所以参数应该保持不变,因为被调用的方法是一个重写接口(例如,如果我更改这个,我必须执行200次左右,因为它在VB.Net中,而不是在C#(=1 change))

这是我的示例。我希望它能解决您的问题:

如果未定义数据库集的类型

Public Function Test(Of TEntity As Class, TKey) _
    (keySelector As Expression(Of Func(Of TEntity, TKey))) As IList(Of TEntity)
    Return DataContext.Set(Of TEntity).OrderBy(keySelector).ToList
End Function
用法:

Repository.Test(Function(obj As MyEntity) obj.Name)
如果定义了数据库集的类型,则可以使用其他示例:

    Public Function Test2(Of TKey) _
        (keySelector As Expression(Of Func(Of MyEntity, TKey))) _
        As IList(Of MyEntity)
        Return DataContext.Set(Of MyEntity).OrderBy(keySelector).ToList
    End Function
这样使用:

Repository.Test(Function(obj) obj.Name)
这是我的样品。我希望它能解决您的问题:

如果未定义数据库集的类型

Public Function Test(Of TEntity As Class, TKey) _
    (keySelector As Expression(Of Func(Of TEntity, TKey))) As IList(Of TEntity)
    Return DataContext.Set(Of TEntity).OrderBy(keySelector).ToList
End Function
用法:

Repository.Test(Function(obj As MyEntity) obj.Name)
如果定义了数据库集的类型,则可以使用其他示例:

    Public Function Test2(Of TKey) _
        (keySelector As Expression(Of Func(Of MyEntity, TKey))) _
        As IList(Of MyEntity)
        Return DataContext.Set(Of MyEntity).OrderBy(keySelector).ToList
    End Function
这样使用:

Repository.Test(Function(obj) obj.Name)

您可以添加更多关于您的数据库集的数据吗?您的dbset是如何定义的?像这样DataContext.Set(Of tenty)?私有只读dbset作为IDbSet(Of T)dbset=DataContext()[Set](Of T)你能添加更多关于你的dbset的数据吗?您的dbset是如何定义的?像这样DataContext.Set(十分之一)?私有只读数据库集,作为IDbSet(Of T)dbset=DataContext()[集](Of T)()。我对函数的第二个解决方案(根据我的说法)是完全相似的。你测试过吗?它是从我自己的一个项目中复制的,我会很快更新我的答案,并包括我项目中的实际代码。奇怪。我对函数的第二个解决方案(根据我的说法)是完全相似的。你测试过吗?它是从我自己的一个项目中复制的,我会很快更新我的答案,并包括我项目中的实际代码。