0

我是 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;
        }

任何帮助,将不胜感激!

4

1 回答 1

0

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

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

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

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

于 2010-04-26T22:01:50.220 回答