C# 动态地将表名传递给LINQ

C# 动态地将表名传递给LINQ,c#,.net,linq,C#,.net,Linq,我在数据库中存储了一个机器列表,但它们在不同的表中与它们分开 例如: 表名:行 MachineType1:machine1、Machine2、Machine3 机器类型PE2:机器1、机器2、机器3、机器4 机器类型PE3:机器1,机器2 我还有另一张表,存储机器类型,如下所示: 类型1,机器类型PE1 类型2,机器类型PE2 类型3,机器类型PE3 我需要检查每种类型的机器(例如:Type2),获取表名(例如:MachineType2),检查该表并获取每台机器的Id(例如:1、2、3和

我在数据库中存储了一个机器列表,但它们在不同的表中与它们分开

例如:

表名

  • MachineType1:machine1、Machine2、Machine3

  • 机器类型PE2:机器1、机器2、机器3、机器4

  • 机器类型PE3:机器1,机器2

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

  • 类型1,机器类型PE1

  • 类型2,机器类型PE2

  • 类型3,机器类型PE3

我需要检查每种类型的机器(例如: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;
}
foreach(进程中的var进程){
可变风险动态=
(来自t in _context.PlasticProcess//此表具有所有类型的机器和表名
其中(t.Id==进程)
选择t.MachineName
).First();
可数机器=
从_context.dynamictable//中的x开始(问题就在这里)
选择x.Id;
}

打电话给非泛型会对你有帮助吗?我假设
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()方法


p.S.:我刚刚意识到,你在哪里提到这是否是EF。这个答案假设它是EF。

您将在
System.Linq.Dynamic
名称空间中找到该功能。我做到了,我真的很高兴你能分享这一点。问题是我找不到任何可以使表名成为参数的东西。只有查询的条件。您最好使用字符串操作创建SQL语句,并将该字符串直接交给EF上下文。看,我做不到这一点,但感谢您的时间和努力。您的第二个查询是指
\u上下文。dynamictable
,但
dynamictable
是一个变量。它应该是dynamictable中x的
。不确定这是否是唯一的问题。Tanveer,非常感谢您抽出时间!我遇到了这个问题:我得到了一个错误CS1501。它表示“Set”的重载不接受一个参数->Set()。你知道怎么解决这个问题吗?是的,我正在使用EF。但是我也会尝试用DbSet.SqlQuery()来解决这个问题。奇怪的错误,你有。可能是EF和EF核心之间的API冲突。我链接的是EF6.x。我将尝试用原始Sql解决这个问题,非常感谢!