2010-04-26 181 views
0

我是新來LLBLGEN Pro和我檢查重複,我有以下SQL:LLBL根謂詞過濾

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 Profiler執行此操作,或者如果您沒有訪問權限,請打開LLBLGen中的跟蹤:LLBL Help Link

  2. 我不認爲類別過濾器的語法將工作。我想如果你想使用你使用的簡單謂詞語法來包含多個類別(field == value),你需要傳遞一個Guid數組,而不是一個通用列表。我不認爲通用名單工作,我很驚訝,它不會拋出異常。一個快速的嘗試將是「ArticleTopicCategoryFields.Id == categories.ToArray()。(此外,它們是實際的Guids,或由Guids製成的字符串?)

  3. 最後,如果效率完全是問題,應該考慮使用LLBL的GetScalar()功能,所以他們只是做一個簡單的單字段查詢,返回一個標量值,而不是將完整的結果集投影到EntityCollection。不幸的是,我找不到一個好的鏈接在文檔

+0

解決filter.AddWithAnd(ArticleTopicCategoryFields.Id ==類別);本來應該filter.AddWithAnd(ArticleTopicCategoryFields.ArticleId ==類別);但是,這是LLBL幫助的感謝有用的鏈接!另外,關於爲了提高效率,我使用了GetDbCount而不是GetMulti來返回結果集的計數。 – Neil 2010-04-28 19:47:11