簡體   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