使用Entity Framework 6 Database First向导设置我的模型,然后创建DbContext:
console.log('this error', error)
log.error('this error:', error)
然后使用LINQ和我的一个数据库表: Dim db As New mydatabaseEntities
(类型:db.stations
),如下所示,查询按预期工作:
DbSet(Of station)
但是,如果我将数据库表名指定为字符串,然后使用 Dim myDbSet1 = db.stations
Dim isQuerable1 = TypeOf myDbSet1 Is IQueryable
Dim query1 = myDbSet1.Where(Function(record) record.id = "677010")
在运行时获取CallByName
,则会收到错误消息:
DBSet(Of station)
在这两种情况下, Dim tableName As String = "stations"
Dim myDbSet2 = CallByName(db, tableName, CallType.Get)
Dim isQueryable = TypeOf myDbSet2 Is IQueryable
Dim query2 = myDbSet2.Where(Function(record) record.id = "677010")
和myDbSet1
都有myDbSet2
界面。但是,在第二个示例中,我收到以下错误:
IQueryable
System.MissingMemberException: 'Public member 'Where' on type 'DbSet(Of station)' not found.'
时遇到类似问题,或者问题与接口或LINQ / Entity Framework有关?答案 0 :(得分:1)
方法Where
是IEnumerable(Of T)接口上的Extension方法,是IQueryable(Of Out T) interface的继承方法。该方法实际上并不存在于该对象上。它的调用由编译器连接。
根据您的使用情况,以下任何一种都应该有效。如果演员失败,请记住将测试myDbSet2
置空。
Dim myDbSet2 = TryCast(CallByName(db, tableName, CallType.Get), IEnumerable(Of Station))
或
Dim myDbSet2 = TryCast(CallByName(db, tableName, CallType.Get), IQueryable(Of Station))