Фильтр предиката LLBL Gen - PullRequest
0 голосов
/ 26 апреля 2010

Я новичок в 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 голосов
/ 27 апреля 2010

Недостаточно информации, чтобы убедиться, что это полезно, но:

  1. Я бы начал с проверки того, что сгенерированный SQL соответствует вашим ожиданиям. Сделайте это с помощью SQL Profiler или, если у вас нет доступа, включите трассировку в LLBLGen: Справка LLBL .

  2. Я не думаю, что синтаксис для фильтра категорий будет работать. Я думаю, что если вы хотите включить несколько категорий, используя синтаксис простого предиката, который вы используете (поле == значение), вам нужно передать массив Guids, а не общий список. Я не думаю, что общие списки работают, и я удивлен, что это не исключение. Быстрая вещь, которую можно попробовать, была бы "ArticleTopicCategoryFields.Id == Categories.ToArray (). (Кроме того, они являются фактическими направляющими или строками из направляющих?)

  3. Наконец, если эффективность вообще является проблемой, вы должны взглянуть на использование функциональности GetScalar () LLBL, чтобы вы просто выполняли простой однополевый запрос, возвращающий скалярное значение, а не проецировали полный набор результатов на EntityCollection. К сожалению, я не могу найти хорошую ссылку на это в документации.

...