Как построить Linq to Sql где предложение по крупицам? - PullRequest
11 голосов
/ 22 мая 2009

Мне передают набор параметров строки запроса в классе параметров, с помощью которого можно выполнить запрос к базе данных изображений. При каждом вызове некоторые параметры могут быть нулевыми. Так что в SQL я бы построить запрос как

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

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

Как мне сделать то же самое с помощью Linq?

Ответы [ 2 ]

13 голосов
/ 22 мая 2009

Лучший способ динамически создавать выражения where - использовать замечательный Albahari PredicateBuilder .

Вы можете использовать это для построения выражений where-clause, содержащих OR, а также 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);
11 голосов
/ 22 мая 2009

easy, IQueryables не оцениваются, пока вы не перечислите, поэтому просто продолжайте помечать предложения where.

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

if (parameters.Value2 != null)
{
    results = results.Where(x => <some other condition>);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...