我是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;
}
任何帮助将不胜感激!
答案 0 :(得分:0)
没有足够的信息确保这有用,但是:
我首先要验证生成的SQL是否符合预期。使用SQL事件探查器执行此操作,或者如果您没有访问权限,请在LLBLGen中启用跟踪:LLBL Help Link。
我认为类别过滤器的语法不起作用。我想如果你想使用你正在使用的简单谓词语法(field == value)包含多个类别,你需要传递Guids数组,而不是通用列表。我认为通用列表不起作用,我很惊讶它没有抛出异常。一个快速的尝试是“ArticleTopicCategoryFields.Id == categories.ToArray()。(另外,它们是真正的Guids,还是由Guids制作的字符串?)
最后,如果效率完全是一个问题,你应该考虑使用LLBL的GetScalar()功能,所以他们只是做一个简单的单字段查询,它返回一个标量值,而不是完整的结果集到EntityCollection上。不幸的是,我在文档中找不到与此相关的良好链接。