我正在构建IQueryable<int>
,并且根据用户选择的条件,生成的SQL中int列的别名可能会有所不同。有时它是列的名称,有时它就像“C1”。与我在这里询问How can I get the parameters of an Entity Framework query?的问题类似,我想知道是否有办法获取生成的查询别名?
答案 0 :(得分:0)
这不是直接回答我原来的问题,但我刚刚学会了一个很棒的技巧,它允许我覆盖别名(在SQL Server中)并且我必须共享它。
var query = myIQueryable.ToString();
var sql = $@"SELECT x.myAlias
FROM ({query}) x(myAlias)";
现在我可以将我的超复杂IQueryable与这个小小的SQL片段结合起来进行批量插入和更新操作。如:
var query = myIQueryable.ToString();
var sql = $@"INSERT INTO dbo.myTable (col1)
SELECT x.myAlias
FROM ({query}) x(myAlias)";
或者
var query = myIQueryable.ToString();
var sql = $@"UPDATE dbo.myTable
SET Col1 = 1
FROM dbo.myTable
JOIN ({query}) x(myAlias) ON x.myAlias = dbo.myTable.SomeColumn";
当然,您仍然需要插入查询的参数,您可以按照上一个问题给出的示例获取该参数:How can I get the parameters of an Entity Framework query?