我想构建一个查询,其中tablename将是动态的,我将从另一个查询中获取它。这2个查询位于不同的datacontexts中。
CODE
var tablename = (from tab in db.Tabs
where tab.id == tabid
select tab.name).FirstOrDefault();
var pid = (from p in tablename
select p.id).FirstOrDefault();
答案 0 :(得分:2)
表名不能作为参数提供,因此您必须先在函数或存储过程中手动构造SQL字符串,然后才能执行它。
create PROC read_from_dynamic_table(@TableName NVARCHAR(50))
AS
BEGIN
DECLARE @SQLSelectQuery NVARCHAR(MAX)=''
SET @SQLSelectQuery = 'SELECT * FROM ' + @TableName
exec(@SQLSelectQuery)
END
然后,您可以使用表名作为参数
来调用proc答案 1 :(得分:0)
要将表名动态地提供给第二个查询,可以使用存储过程而不是LINQ。
当您获得存储过程时,然后通过传递 df[boolMask]= ser
(第一次查询的结果)来调用它。
这是一个粗略的例子,只是为了给你一个想法:
tablename
答案 2 :(得分:-3)
using(SqlConnection sqlCon = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
SqlCommand com = new SqlCommand();
SqlDataReader sqlReader;
com.CommandText = "Select id from @tableName";
com.CommandType = CommandType.Text;
com.Parameters.Add(new SqlParameter("@tableName", tableName);
com.Connection = sqlCon;
sqlCon.Open();
sqlReader = com.ExecuteReader();
var dt = new DataTable();
dt.Load(sqlReader); //Query output is in dt now
}