gpt4 book ai didi

c# - linq中的动态表名

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:12 25 4
gpt4 key购买 nike

<分区>

我正在尝试执行一些 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);
}

运行,但始终返回零记录。用户表肯定包含记录,并且在任何情况下,当我使用上面的第一种方法直接调用它时,我都会按预期获得所有记录。如何修改我的代码以实际拉取记录,而不仅仅是一个空集合?

编辑:我也试过这个:

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 (Object must implement IConvertible).

如何转换 val实际可用对象的变量?

不知道这是否相关,但这是在 EntityFramework 4 上。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com