c# - 给定一个表名列表作为字符串,如何一次查询多个表?

标签 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,所以我去那里探索。然而,下一层似乎是元数据的死胡同,没有实际数据从我的循环中出来。我什至在朝着正确的方向前进吗?一旦我克服了这个障碍,我就可以很容易地列出一个 list 并以这种方式得出我的结果。任何帮助,将不胜感激。谢谢。

最佳答案

如果您需要通过主键(数据库上下文中的 EntityKey)查询许多表,则 ObjectContext 有一个名为 GetObjectByKey 的方法,它允许您通过 EntityKey 获取对象 因此,您只需要构造一个 EntityKey。根据MSDN article ,这很简单,

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

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

关于c# - 给定一个表名列表作为字符串,如何一次查询多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497262/

相关文章:

c# - 使用 C# 在局域网中查找 Socket 服务器

c# - 使用 Linq 将 DataTable 分解成固定大小的 block 的干净方法是什么?

c# - Linq 查询不会从另一个对象中的对象返回结果

c# - Linq FirstOrDefault 每次迭代都会评估谓词?

c# - iTextSharp - 如何获取用于签名的 PDF 内容,然后稍后再签名

c# - 在 C# 中以编程方式调整 wpf 窗口的大小

c# - 如何在 app.config 文件中转义 [?

c# - 如何通过 websocket 将音频发送到 Nexmo Voice

c# - LINQ to Entities 无法识别方法 'Int32 Next()' 方法

c# - 使用 linq 更改数组中的一个字段