C# 逐字字符串文本中的替换?

C# 逐字字符串文本中的替换?,c#,sql,sql-server,C#,Sql,Sql Server,关于如何在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

关于如何在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 .Frand方法将用{S}顺序的参数替换字符串中的参数,因此{ 0 }将用CuSTType的值替换,{C}的值为1 }。

< P>您可以考虑使用LINQ to SQL,如果还没有的话。 回答实际问题时,如果要创建查询,可以使用前面提到的
string.Format
。如果要修改现有字符串,请尝试使用
string.Replace
Regex.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");

这是一个很好的回应和想法。