使用EntityFramework6DatabaseFirst向导建立我的模型并创建一个DbContext之后:
Dim db As New mydatabaseEntities然后,使用LINQ与我的数据库表之一: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.'CallByName时,我会遇到类似的问题吗?还是问题与接口或LINQ/Entity有关?发布于 2018-01-27 22:55:38
Where方法是IEnumerable(Of T)接口上的扩展方法,是IQueryable( Out T)接口的继承方法。该方法并不真正存在于对象上。它的调用由编译器连接。
根据用例的不同,以下任何一项都应该有效。只需记住,如果强制转换失败,则测试myDbSet2为空。
Dim myDbSet2 = TryCast(CallByName(db, tableName, CallType.Get), IEnumerable(Of Station))或
Dim myDbSet2 = TryCast(CallByName(db, tableName, CallType.Get), IQueryable(Of Station))https://stackoverflow.com/questions/48475363
复制相似问题