【问题标题】:How can I get the column aliases generated by Entity Framework?如何获取实体框架生成的列别名?
【发布时间】:2016-06-27 23:08:20
【问题描述】:

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

【问题讨论】:

    标签: entity-framework entity-framework-6


    【解决方案1】:

    直接回答了我最初的问题,但我刚刚学到了一个很棒的技巧,它允许我覆盖别名(在 SQL Server 中),我不得不分享它。

    var query = myIQueryable.ToString();
    var sql = $@"SELECT x.myAlias
                 FROM ({query}) x(myAlias)";
    

    现在我可以将我的超级复杂的 IQueryable 与这个小 SQL 的 sn-p 结合起来进行批量插入和更新操作。如:

    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?

    【讨论】:

    • 在 FROM 关键字之后我没有得到 x(myAlias) 后面的内容。据我所知,这不是有效的 T-SQL 语法。你有更多描述性的工作示例吗?
    • @Shark, x(myAlias) 只是一个表别名,后跟多个列别名。我找不到确切的文档,但我看到它已被使用 here like derived_table [ [ AS ] table_alias ] [ ( column_alias [ ,...n ] ) ]
    • 我有你。这里是工作示例select * from (select ID as id, title as name1 from dbo.table) t (differentName1, differentId)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多