如果将表名列表作为字符串,您如何一次查询多个表?

leg*_*djr 6 c# linq

所以我在一家公司工作,那里有几个不同名称的表,但结构完全相同(日期,时间,价值).我希望能够做的是让我的程序(C#或LINQ/LINQPad)运行这些表并查询特定的行,这样我就可以确保它们都已正确更新.这可行吗?

到目前为止,我的思路一直都是这样.知道每个表名会给它一个不同的类,我试图通常从表中获取值.我可以在这里使用代码来获取表格

DataContext dc = new DataContext();
var myTable = (ITable)dc.GetType().GetProperty("Table").GetValue(dc, null);
Run Code Online (Sandbox Code Playgroud)

我的问题是我试图使用类似的方法从这个表中获取列.但是,下面是抛出一个错误:

foreach(var e in myTable)
{
    double myValue = (double)e.GetType().GetProperty("Value").GetValue(e, null);
}
Run Code Online (Sandbox Code Playgroud)

所以当我看一下e.GetType()的所有属性时,我注意到它有2个,其中一个是Context,所以我去那里探索.然而,下一层下来似乎是元数据的死胡同,没有实际数据来自我的循环.我甚至走向了正确的方向吗?一旦我遇到这个障碍,我就可以很容易地制作一个列表并以这种方式获得我的结果.任何帮助,将不胜感激.谢谢.

Yur*_*ian 1

如果您需要通过主键(数据库上下文中的EntityKey)查询许多表,那么 ObjectContext有一个调用的方法GetObjectByKey允许您通过所以获取对象EntityKey ,因此您只需要构造一个EntityKey。根据MSDN 文章,这非常简单,

DataContext dc = new DataContext();
EntityKey key = new EntityKey("DataContext.Table","Id", 123);
dynamic entity = dc.GetObjectByKey(key);
Run Code Online (Sandbox Code Playgroud)

您可以创建一个对于具有相同结构的所有表(实体)通用的接口,并将对象转换为该接口,或者仅使用dynamic.