参数化ServiceStack自定义SQL查询

时间:2017-04-06 02:45:53

标签: c# sql-server ormlite-servicestack

我使用OrmLite进行以下自定义SQL查询:

var results = db.Select<Tuple<Customer,Purchase>>(@"SELECT c.*, 0 EOT, p1.*
    FROM customer c
    JOIN purchase p1 ON (c.id = p1.customer_id)
    LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
        (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
    WHERE p2.id IS NULL;");

添加可选WHERE子句的最佳方法是,例如,当字段有值时过滤给定的客户名称字段,或者为查询添加分页?

1 个答案:

答案 0 :(得分:2)

如果您正在使用自定义SQL,则只需自己构建其他查询,例如:

var sql = @"SELECT c.*, 0 EOT, p1.*
    FROM customer c
    JOIN purchase p1 ON (c.id = p1.customer_id)
    LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
        (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
    WHERE p2.id IS NULL";

//string name = "Customer Name";
string name = null;
if (name != null)
{
    sql += "\nAND name = @name";
}

int? limit = 100;
if (limit != null)
{
    sql += $"\nLIMIT {limit}";
}

var results = db.Select<Tuple<Customer,Purchase>>(sql, new { name });

A Live Example of this is available on Gistlyn