2010-04-26 6 views
0

Je suis nouveau à LLBLGen Pro et je vérifie les doublons, je l'instruction SQL suivante:LLBL Gen prédicats Filtre

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') 

Chaque fois que je fais un pas si ma fonction, il retourne toujours 0:

code 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; 
     } 

Toute aide serait appréciée!

Répondre

1

Pas assez d'informations pour être sûr que cela est utile, mais:

  1. Je commencerais par vérifier que le SQL généré est ce que vous attendez. Pour ce faire avec SQL Profiler, ou si vous n'avez pas accès activer le suivi dans LLBLGen: LLBL Help Link.

  2. Je ne pense pas que la syntaxe pour un filtre de catégorie fonctionnera. Je pense que si vous voulez inclure plusieurs catégories en utilisant la syntaxe de prédicat simple que vous utilisez (field == value), vous devez passer un tableau de Guids, et non une liste générique. Je ne pense pas que les listes génériques fonctionnent, et je suis surpris qu'il ne crée pas d'exception. Une chose rapide à essayer serait "ArticleTopicCategoryFields.Id == categories.ToArray(). (Aussi, sont-ils réels Guids, ou des chaînes faites à partir de Guids?)

  3. Enfin, si l'efficacité est en tout un problème, vous vous devriez utiliser la fonction GetScalar() de LLBL, donc vous faites simplement une simple requête sur un seul champ qui renvoie une valeur scalaire, et non pas le résultat complet sur un EntityCollection. dans la documentation

+0

Résolu filter.AddWithAnd (ArticleTopicCategoryFields.Id == les catégories).. Aurait été filter.AddWithAnd (ArticleTopicCategoryFields.ArticleId == catégories), mais qui était un lien utile pour LLBL Aide merci! En outre, en ce qui concerne s à l'efficacité, j'ai utilisé GetDbCount au lieu de GetMulti pour retourner le nombre de résultats. – Neil