如何逐步建立一个Linq to Sql where子句?

Nic*_*len 11 c# linq-to-sql

我正在一个Parameters类中传递一组查询字符串参数,用于查询图像数据库.每次调用时,一些参数可以为null.所以在sql中我会建立像这样的查询

if (parameters.Value1 != null)
{
    sql.Append("sql_where_clause");
}

if (parameters.Value2 != null)
{
    sql.Append("sql_where_clause");
}
Run Code Online (Sandbox Code Playgroud)

我如何使用Linq做同样的事情?

Pet*_*ery 13

动态构建where子句的最佳方法是使用精彩的Albahari PredicateBuilder.

您可以使用它来构建包含OR以及where的子句表达式AND.对此的语言集成支持最初是有意的,但并没有完全成为C#3.

例如:

var whereClause = PredicateBuilder.False<Customer>();

if (parameters.Value1 != null)
{
    whereClause = whereClause.Or(customer => customer.City == parameters.Value1);
}

var query = db.Customers.Where(whereClause);
Run Code Online (Sandbox Code Playgroud)


And*_*ock 11

简单,IQueryables在您枚举之前不会被评估,所以只需在where子句上标记.

if (parameters.Value1 != null)
{
    results = results.Where(x => <some condition>);
}

if (parameters.Value2 != null)
{
    results = results.Where(x => <some other condition>);
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这只适用于`AND`ing谓词. (7认同)