关于如何在C#中编写长SQL查询的这个question,解决方案建议将一个长的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
";
这让我对另一个相关问题感到好奇。我能以某种方式使用替代吗?也就是说,如果说表名更改但查询保持不变,我将如何管理?我是否必须回归使用另一种使用字符串连接构建字符串的方法,还是有更优雅的方法?
答案 0 :(得分:22)
为什么不使用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);
答案 1 :(得分:5)
是的,您可以使用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。
答案 2 :(得分:1)
如果您还没有使用LINQ to SQL,可以考虑使用它。
回答实际问题,如果您正在创建查询,可以像其他人提到的那样使用string.Format
。如果您想修改现有字符串,请按照here所述使用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");