Как пополнить битку Linq в Sql where?
Мне передают набор параметров querystring в классе Parameters, с помощью которых можно запрашивать базу данных изображений. При каждом вызове некоторые параметры могут быть нулевыми. Поэтому в sql я бы построил запрос, например
if (parameters.Value1 != null)
{
sql.Append("sql_where_clause");
}
if (parameters.Value2 != null)
{
sql.Append("sql_where_clause");
}
Как мне сделать то же самое с Linq?
Ответы
Ответ 1
easy, IQueryables не оцениваются до тех пор, пока вы не перечислите, так что просто продолжайте отмечать те предложения where.
if (parameters.Value1 != null)
{
results = results.Where(x => <some condition>);
}
if (parameters.Value2 != null)
{
results = results.Where(x => <some other condition>);
}
Ответ 2
Лучший способ динамически строить where-clauses - использовать замечательный Albahari PredicateBuilder.
Вы можете использовать это для создания выражений where-where, содержащих OR
, а также AND
. Языковая интеграция для этого изначально была предназначена, но не совсем сделал его в С# 3.
Например:
var whereClause = PredicateBuilder.False<Customer>();
if (parameters.Value1 != null)
{
whereClause = whereClause.Or(customer => customer.City == parameters.Value1);
}
var query = db.Customers.Where(whereClause);