使用谓词的实体框架

时间:2012-02-17 14:46:23

标签: entity-framework predicatebuilder

我正在构建一个需要使用谓词的搜索。但是,每当我运行以下查询时,我继续只得到最后一个谓词的结果。第一个结果不包括在内。基于我下面的查询,任何人都可以指出我正确的方向。

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 个答案:

答案 0 :(得分:1)

也许这不是解决方案,但您是否尝试按如下方式拆分谓词

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')));