使用CallByName时出现MissingMemberException

时间:2018-01-27 11:33:16

标签: vb.net entity-framework linq entity-framework-6

使用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有关?

1 个答案:

答案 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))