繁体   English   中英

在逐字字符串文字中替换?

[英]Substitution inside verbatim string literals?

与此相关的问题 。有关如何内C#写长长的SQL查询,该解决方案建议,长的SQL查询应该写成:

string query = @"
    SELECT
        c.CUSTOMER_ID,
        COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME
        ct.NAME as CUSTOMER_TYPE
    FROM
        CT_CUSTOMER_TYPE AS ct INNER JOIN CUSTOMER AS c
            ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID
    "; 

这让我对另一个相关问题感到好奇。 我能以某种方式使用替代吗? 也就是说,如果说表名更改但查询保持不变,我将如何管理? 我是否必须回归使用另一种使用字符串连接构建字符串的方法,还是有更优雅的方法?

为什么不使用string.Format? 在您给出的具体示例中,您可以执行类似的操作

string query = @"
SELECT
    c.CUSTOMER_ID,
    COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME
    ct.NAME as CUSTOMER_TYPE
FROM
    {0} AS ct INNER JOIN {1} AS c
        ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID
"; 

并调用

string real_query = string.Format(query, tblName1, tblName2);

是的,您可以使用String.Format方法。

string custtype = "CT_CUSTOMER_TYPE";
string cust = "CUSTOMER"; 
string query = @"
SELECT
    c.CUSTOMER_ID,
    COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME
    ct.NAME as CUSTOMER_TYPE
FROM
    {0} AS ct INNER JOIN {1} AS c
        ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID
"; 

string endQuery = String.Format(query, custtype, cust);

String.Format方法将使用字符串后面的参数顺序替换{x}标识的参数,因此{0}将替换为custtype的值,而{1}将替换为cust的值。

您可以考虑使用LINQ to SQL,如果您还没有。

回答实际问题,你可以像其他人提到的那样使用string.Format创建查询。 如果要修改现有的字符串,请尝试使用string.ReplaceRegex.Replace描述这里 那是:

string query = @"
    SELECT
        c.CUSTOMER_ID,
        COALESCE (c.FIRST_NAME, ''_ + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME
        ct.NAME as CUSTOMER_TYPE
    FROM
        CT_CUSTOMER_TYPE AS ct INNER JOIN CUSTOMER AS c
            ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID
    ";
query.Replace("CT_CUSTOMER_TYPE", "NEW_TABLE_NAME");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM