动态将表名传递给LINQ

时间:2019-12-08 19:52:17

标签: c# .net linq

我有一个存储在数据库中的机器列表,但是它们与它们的类型不同,位于不同的表中。

示例:

表名

  • MachineType1:机器1,机器2,机器3

  • MachineType2:机器1,机器2,机器3,机器4

  • MachineType3:计算机1,计算机2

还有另一个存储机器类型的表,如下所示:

  • Type1,MachineType1

  • Type2,MachineType2

  • Type3,MachineType3

我需要遍历每种类型的机器(即:Type2),获取表名(即:MachineType2),遍历该表并获取每台机器的ID(即:1、2、3和4)

我做了很多研究,但找不到任何可以帮助我的东西。

这就是我想要做的:

foreach (var process in processes) {
   var dynamictable =
      (from t in _context.PlasticProcess // This table has all types of machines and table names
       where (t.Id == process)
       select t.MachineName
      ).First();

   IEnumerable<int> machine =
      from x in _context.dynamictable // (Here is the problem)
      select x.Id;
}

1 个答案:

答案 0 :(得分:1)

致电非通用DbContext.Set()会帮助您吗?我假设t.MachineName是一个字符串,否则请适当更新。

foreach (var process in processes) {
   var dynamictable =
      (from t in _context.PlasticProcess // This table has all types of machines and table names
       where (t.Id == process)
       select t.MachineName
      ).First();

    var set = _context.Set(Type.GetType(dynamicTable));
    // use set.SqlQuery here.
}

您可以了解有关DbSet.SqlQuery()方法here的信息。

P.S。:我刚刚意识到,您在哪里都没有提到这是否是EF。该答案假定它是EF。