如何获取Entity Framework生成的列别名?

时间:2016-06-27 13:59:54

标签: entity-framework entity-framework-6

我正在构建IQueryable<int>,并且根据用户选择的条件,生成的SQL中int列的别名可能会有所不同。有时它是列的名称,有时它就像“C1”。与我在这里询问How can I get the parameters of an Entity Framework query?的问题类似,我想知道是否有办法获取生成的查询别名?

1 个答案:

答案 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?