如何逐步建立一个Linq to Sql where子句?
我正在一个Parameters类中传递一组查询字符串参数,用于查询图像数据库。 每次调用时,一些参数可以为null。 所以在sql中我会建立像这样的查询
if (parameters.Value1 != null) { sql.Append("sql_where_clause"); } if (parameters.Value2 != null) { sql.Append("sql_where_clause"); }
我如何使用Linq做同样的事情?
简单,IQueryables在您枚举之前不会被评估,所以只需在where子句上标记。
if (parameters.Value1 != null) { results = results.Where(x => ); } if (parameters.Value2 != null) { results = results.Where(x => ); }
动态构建where-clause的最佳方法是使用精彩的Albahari PredicateBuilder 。
您可以使用它来构建包含OR
和AND
where子句表达式。 对此的语言集成支持最初是有意的,但并没有完全成为C#3。
例如:
var whereClause = PredicateBuilder.False(); if (parameters.Value1 != null) { whereClause = whereClause.Or(customer => customer.City == parameters.Value1); } var query = db.Customers.Where(whereClause);