代码之家  ›  专栏  ›  技术社区  ›  Nick Allen

如何一点一点地构建LINQtoSQLWHERE子句?

  •  11
  • Nick Allen  · 技术社区  · 17 年前

    在用于查询图像数据库的parameters类中,向我传递了一组querystring参数。在每次调用中,某些参数可能为null。因此,在sql中,我将构建如下查询

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

    如何使用Linq实现同样的功能?

    2 回复  |  直到 17 年前
        1
  •  13
  •   Pete Montgomery    17 年前

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

    您可以使用它来构建where子句表达式,其中包含 OR 以及 AND . 对此的语言集成支持最初是有意的,但是 didn't quite make 将其转换为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);
    
        2
  •  11
  •   Andrew Bullock    17 年前

    很简单,在枚举之前不会计算IQueryables,所以只需继续标记where子句即可。

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