2010-04-26 1 views
0

필터, 나는 다음과 같은 SQL이 있습니다LLBL 세대 술어 내가 프로 LLBLGen 새로운 오전과 중복을 검사하고

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

충분하지 않은 정보는이 유용해야하지만하기 :

  1. 내가 생성 된 SQL은 당신이 기대하는 것을 확인하여 시작합니다. SQL 프로파일 러를 사용하거나 LLBLGen에서 액세스를 추적 할 수있는 권한이없는 경우 : LLBL Help Link.

  2. 나는 범주 필터 구문이 작동하지 않을 것이라고 생각합니다. 난 당신이 사용하는 간단한 술어 구문 (필드 == 값)를 사용하여 여러 카테고리를 포함하려는 경우, 당신은 일반 목록이 아닌 Guids의 배열을 전달해야합니다 생각합니다. 일반 목록이 작동한다고 생각하지 않습니다. 예외가 발생하지 않는다는 것에 놀랍니다. 시도 할 수있는 가장 빠른 방법은 "ArticleTopicCategoryFields.Id == categories.ToArray()입니다. (실제 Guids입니까, 아니면 Guids로 만든 문자열입니까?)

  3. 마지막으로 효율성이 전혀 문제가되지 않으면 LLBL의 GetScalar() 기능을 사용해야하므로 스칼라 값을 반환하고 EntityCollection에 전체 결과 집합을 투영하지 않는 단순한 단일 필드 쿼리를 수행하는 것입니다. 불행히도이 좋은 링크를 찾을 수 없습니다. 워드 프로세서에

+0

해결 filter.AddWithAnd (ArticleTopicCategoryFields.Id == 범주).. filter.AddWithAnd (ArticleTopicCategoryFields.ArticleId == 범주)되어 있어야합니다,하지만 그 LLBL 도움말 덕분에 유용한 링크이었다! 또한, 관련하여 효율성을 높이기 위해 GetMulti 대신 GetDbCount를 사용하여 결과 집합의 개수를 반환했습니다. – Neil