【发布时间】:2012-04-06 22:25:54
【问题描述】:
我想让这个工作:
DBSet 构造函数:
dbset = DataContext().[Set](Of T)()
调用:(Count & Page 用于分页,例如 Count = 20 和 Page = 1,用于前 20 个值)。应按名称排序
LeverancierService.GetLeveranciers(Function(el) el.Name, Count, Page)
c# 中的等价物: LeverancierService.GetLeveranciers(el=> el.Name, Count, Page)
给出错误的方法(如上所示的参数):
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
已经试过改成这个了,还是报同样的错误:
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 处更改))
【问题讨论】:
-
你能添加更多关于你的数据库集的数据吗?您的数据库集是如何定义的?像这样? : DataContext.Set(Of TEntity)?
-
私有只读数据库集作为 IDbSet(Of T)
-
dbset = DataContext().[Set](Of T)()
标签: vb.net linq entity-framework-4 lambda