LINQ / Projection - содержит все шаблоны для фильтрации - PullRequest
1 голос
/ 08 декабря 2011

Есть ли эквивалент "*" для Contains ("")?Я использую некоторые шаблоны для фильтрации, и если фильтр не применяется, мне нужно вернуть все?

string[] filter = {1,2};  // This is dynamic could be filtered values or {} empty.

// This works for filtering by products (1,2)
db.Products.Where(x => filter.Contains(x.ProdId));

Что мне действительно нужно для достижения, это что-то вроде:

// If the filter is empty get all results...if there is a filter passed the filter values in for select
db.Products.Where(x => x.ProdId.Contains(filter.Length == 0 ? "*" : filter);

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

Вы можете просто добавить где, если необходимо:

var query = db.Products.AsQueryable();
if (filter.Any())
    query = query.Where(x => filter.Contains(x.ProdId));

// use query as needed
1 голос
/ 08 декабря 2011

Используйте это:

var result = db.Products.AsQueryable();

if(filter.Any())
    result = result.Where(x => filter.Contains(x.ProdId));

Если фильтр не единственный, где условие, это не проблема, вы можете определить несколько Where s для вашего запроса:

var result = db.Products.Where(x => SomeCondition(x));

if(filter.Any())
    result = result.Where(x => filter.Contains(x.ProdId));
0 голосов
/ 08 декабря 2011

db.Products.Where(x => !filter.Any() || filter.Contains(x.ProdId))

Хотя мне нравятся другие перечисленные ответы:

if(filter.Any()) result = result.Where(x => filter.Contains(x.ProdId));

В первом примере он будет циклически проходить по коллекции и определять, что фильтр имеет элементы для каждого элемента в результате. Второй будет зацикливаться, только если в фильтре есть элементы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...