Vb.net 执行LinqToEntity的OrderBy Linq.Expression as参数=(Of Func(Of T,IComparable))无效
我想让它工作: DBSet构造函数: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 = 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)()。我对函数的第二个解决方案(根据我的说法)是完全相似的。你测试过吗?它是从我自己的一个项目中复制的,我会很快更新我的答案,并包括我项目中的实际代码。奇怪。我对函数的第二个解决方案(根据我的说法)是完全相似的。你测试过吗?它是从我自己的一个项目中复制的,我会很快更新我的答案,并包括我项目中的实际代码。