在c#代码中编写SQL查询的最佳实践是什么?

šlj*_*ker 7 c# coding-style

在我目前的项目中,我正在使用SQL CE.由于它不支持存储过程,我必须在存储库中编写sql查询.

选项1:

StringBuilder query = new StringBuilder();
query.Append("SELECT");
query.Append("    c.CUSTOMER_ID,");
query.Append("    COALESCE (c.FIRST_NAME, '') + ' ' + COALESCE (c.LAST_NAME, '') AS FULL_NAME");
query.Append("    ct.NAME as CUSTOMER_TYPE");
query.Append("FROM ");
query.Append("    CT_CUSTOMER_TYPE AS ct INNER JOIN CUSTOMER AS c ON ct.CUSTOMER_TYPE_ID = c.CUSTOMER_TYPE_ID");
Run Code Online (Sandbox Code Playgroud)

选项2:

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";
Run Code Online (Sandbox Code Playgroud)

选项1似乎更具可读性,特别是当我有10个以上的表连接时,但选项2更快.
我应该接受哪个选项,在这种情况下最佳做法是什么?

Dea*_*ing 15

选项2可能是几纳秒快,但是当你添加到实际的数据库(几毫秒)执行了一些额外的nanaoseconds的时间几乎没有注册为噪声.

在任何情况下,还有另一种选择,这是两个世界中最好的选择:@ -strings:

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
    ";
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 5

选项3 - 使用逐字字符串文字:

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";
Run Code Online (Sandbox Code Playgroud)


STO*_*STO 5

我将 SQL 字符串放入资源文件中,它允许轻松编辑多行查询,并提供对该查询的强类型命名访问,即使使用 IntelliSence 工具提示也是如此。