逐字逐句字符串文字中的替换
本文关键字:替换 文字 字符串 逐字逐句 | 更新日期: 2023-09-27 17:59:25
关于如何在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 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.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");
插值逐字字符串
string filter = "name LIKE '%volvo%'";
string strSQL = $@"
SELECT code, name
FROM tb_car
WHERE {filter}
";