如何逐步建立一个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 。

您可以使用它来构建包含ORAND 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);