这个问题已经在这里有一个答案:
- 查询使用实体框架,从动态创建的表中的数据 2回答
- 在动态LINQ查询设置的表名 2个回答
我试图执行一些LINQ
使用动态表名的命令。 例如,而不是:
var o = (from x in context.users select x);
我想用这样的:
var o = (from x in getTableObjectByName("users", context) select x);
或多或少。 下面的代码我到目前为止,这既可以编译和运行:
using (MySiteEntities ipe2 = new MySiteEntities()) {
var propinfo1 = Type.GetType("MySiteNamespace.MySiteEntities").GetProperty("users");
var propval1 = propinfo1.GetValue(ipe2, null);
}
运行,但总是返回零个记录。 users表中最肯定包含记录,并在当我把它直接使用第一种方法任何情况下,以上我得到的所有的记录,符合市场预期。 如何修改我的代码实际上拉下记录,而不是只是一个空洞的收藏?
编辑:我也试过这样:
using (MySiteEntities ipe = new MySiteEntities())
{
var prop = Type.GetType("MySiteNamespace.MySiteEntities").GetProperty("users");
Type dbsetType = typeof(DbSet<>);
dbsetType = dbsetType.MakeGenericType(Type.GetType("MySiteNamespace.user"));
Type t = dbsetType.GetType();
var val = prop.GetValue(ipe, null);
}
在这种情况下,代码不仅运行,但实际上如预期返回结果。 然而, val
是一个对象。 我需要将它转换为类型DbSet<user>
,这将是很容易的,所不同的是所述参数user
是在运行时仅已知....铸造需要是动态的,以及。 我已经尝试使用Convert.ChangeType(val, t);
,但抛出
InvalidCastException的(对象必须实现IConvertible)。
我怎样才能转换val
变量的实际可用对象?
不知道这是否是相关的,但是这是对的EntityFramework 4。