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

时间:2017-01-06 00:54:21

标签: c# linq

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

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

DataContext dc = new DataContext();
var myTable = (ITable)dc.GetType().GetProperty("Table").GetValue(dc, null);

我的问题是我正在尝试使用类似的方法从这个表中获取列。但是,下面是一个错误:

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

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

1 个答案:

答案 0 :(得分:1)

如果需要按主键查询许多表(db上下文中的EntityKey),那么 ObjectContext有一个名为GetObjectByKey的方法,可让您通过EntityKey获取对象 因此,您只需构建一个EntityKey。根据{{​​3}},它非常简单,

DataContext dc = new DataContext();
EntityKey key = new EntityKey("DataContext.Table","Id", 123);
dynamic entity = dc.GetObjectByKey(key);

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