LLBL Gen谓词过滤器

时间:2010-04-26 17:28:21

标签: .net llblgenpro

我是LLBLGen Pro的新手并且正在检查重复,我有以下SQL:

SQL:

select a.TopicId,atc.TopicCategoryId,a.Headline
from article a
inner join ArticleTopicCategory atc on atc.ArticleId = a.Id
where a.TopicId = 'C0064FAE-093B-466E-8745-230534867D2F'
and a.Headline = 'Test'
and atc.TopicCategoryId in ('004D64F7-474C-48F9-9887-17B1E7532A84')

每当我单步执行我的函数时,它总是返回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;
        }

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

没有足够的信息确保这有用,但是:

  1. 我首先要验证生成的SQL是否符合预期。使用SQL事件探查器执行此操作,或者如果您没有访问权限,请在LLBLGen中启用跟踪:LLBL Help Link

  2. 我认为类别过滤器的语法不起作用。我想如果你想使用你正在使用的简单谓词语法(field == value)包含多个类别,你需要传递Guids数组,而不是通用列表。我认为通用列表不起作用,我很惊讶它没有抛出异常。一个快速的尝试是“ArticleTopicCategoryFields.Id == categories.ToArray()。(另外,它们是真正的Guids,还是由Guids制作的字符串?)

  3. 最后,如果效率完全是一个问题,你应该考虑使用LLBL的GetScalar()功能,所以他们只是做一个简单的单字段查询,它返回一个标量值,而不是完整的结果集到EntityCollection上。不幸的是,我在文档中找不到与此相关的良好链接。