Entity Framework с использованием предикатов - PullRequest
1 голос
/ 17 февраля 2012

Я нахожусь в процессе создания поиска, который требует использования предикатов.Однако всякий раз, когда я запускаю приведенный ниже запрос, я продолжаю получать только результаты последнего предиката.Результаты первого не включены.Исходя из моего запроса ниже, любой может указать мне правильное направление.

var _predicate = PredicateBuilder.False<TBLDESIGN>();

_predicate = _predicate.Or(a =>  (a.KEYWORDS.Contains('red') || a.NAME.Contains('red')));

_predicate = _predicate.Or(a =>  (a.KEYWORDS.Contains('blue') || a.NAME.Contains('blue')));


                var results = dbContext.TBLDESIGN
                            .Include(s => s.TBLCOLLECTION)
                            .Include(s => s.LKPRICE)
                            .Include(s => s.TBLDESIGNER)
                            .AsExpandable().Where(_predicate)
                            .OrderByDescending(s => s.DATE_APPROVED)
                            .Select(s => new
                            {
                                s.ACTIVE,
                                s.DATE_CREATED,
                                s.EXPORTED,
                                s.IMAGE_PATH,
                                DesignId = s.ID,
                                s.IS_APPROVED,
                                s.TBLDESIGNER.FIRST_NAME,
                                s.TBLDESIGNER.LAST_NAME,
                                s.TBLDESIGNER.ALIAS,
                                s.NAME,
                                s.LKPRICE.PRICE,
                                s.COMPLETED,
                                s.DATE_APPROVED,
                                DesignerId = s.TBLDESIGNER.ID,
                                s.VIEW_COUNT
                            }).ToList();

Предполагается, что этот запрос возвращает все дизайны, содержащие ключевое слово, содержащее красный или имя, содержащее красный, или ключевое слово, содержащее синий, или имя, содержащее синий.первый предикат и просто возвращает синие значения.

Спасибо за помощь, Билли

1 Ответ

1 голос
/ 17 февраля 2012

Возможно, это не решение, но вы пытались разделить предикаты следующим образом

var _predicate = PredicateBuilder.False<TBLDESIGN>();

_predicate = _predicate.Or(a => a.KEYWORDS.Contains('red'));
_predicate = _predicate.Or(a => a.NAME.Contains('red')));
_predicate = _predicate.Or(a => a.KEYWORDS.Contains('blue'));
_predicate = _predicate.Or(a => a.NAME.Contains('blue')));
...