.net LLBL Gen谓词过滤器

.net LLBL Gen谓词过滤器,.net,llblgenpro,.net,Llblgenpro,我是LLBLGen Pro新手,正在检查是否存在重复,我有以下SQL: SQL: 每当我单步执行函数时,它总是返回0: LLBLGen代码: public bool CheckDuplicateArticle(Guid topicId, List<Guid> categories, string headline) { ArticleCollection articles = new ArticleCollection();

我是LLBLGen Pro新手,正在检查是否存在重复,我有以下SQL:

SQL:

每当我单步执行函数时,它总是返回0:

LLBLGen代码:

public bool CheckDuplicateArticle(Guid topicId, List<Guid> categories, string headline)
        {
            ArticleCollection articles = new ArticleCollection();
            PredicateExpression filter = new PredicateExpression();
            RelationCollection relation = new RelationCollection();
            relation.Add(ArticleEntity.Relations.ArticleTopicCategoryEntityUsingArticleId);
            filter.AddWithAnd(ArticleFields.TopicId == topicId);
            filter.AddWithAnd(ArticleTopicCategoryFields.Id == categories);
            filter.AddWithAnd(ArticleFields.Headline == headline);
            articles.GetMulti(filter, 0, null, relation);
            return articles.Count > 0;
        }

任何帮助都将不胜感激

没有足够的信息来确保这是有帮助的,但是:

我将首先验证生成的SQL是否符合您的期望。使用SQL探查器执行此操作,或者如果您没有访问权限,请在LLBLGen:中打开跟踪

我认为类别过滤器的语法不起作用。我认为,如果您想使用使用field==value的简单谓词语法包含多个类别,则需要传递一个guid数组,而不是一个通用列表。我认为通用列表不起作用,我很惊讶它没有抛出异常。快速尝试的方法是ArticleTopicCategoryFields.Id==categories.ToArray。此外,它们是实际的guid还是由guid生成的字符串

最后,如果效率是一个问题,那么您应该考虑使用LLBL的GetScalar功能,这样您只需要执行一个简单的单字段查询,返回一个标量值,而不是将完整的结果集投影到EntityCollection上。不幸的是,我在文档中找不到这方面的好链接


解决了的。filter.addWith和articleTopicCategoryFields.Id==类别;应该是filter.AddWithAndArticleTopicCategoryFields.ArticleId==类别;但这是一个有用的链接到LLBL帮助谢谢!另外,在效率方面,我使用GetDbCount而不是GetMulti来返回resultset的计数。
public bool CheckDuplicateArticle(Guid topicId, List<Guid> categories, string headline)
        {
            ArticleCollection articles = new ArticleCollection();
            PredicateExpression filter = new PredicateExpression();
            RelationCollection relation = new RelationCollection();
            relation.Add(ArticleEntity.Relations.ArticleTopicCategoryEntityUsingArticleId);
            filter.AddWithAnd(ArticleFields.TopicId == topicId);
            filter.AddWithAnd(ArticleTopicCategoryFields.Id == categories);
            filter.AddWithAnd(ArticleFields.Headline == headline);
            articles.GetMulti(filter, 0, null, relation);
            return articles.Count > 0;
        }