2011-03-02 80 views
0

我是NHibernate和FNH的新手。我試圖查詢單個查詢中的多個可能的對象,我不確定最有效的查詢是什麼。我有話的詞典:流利NHibernate自定義SQL查詢

public class Word 
{ 
    public virtual int Id { get; set; } 
    public virtual string Text { get; set; } 
} 

我想查詢中包含的一個列表中的所有字對象。在SQL我已經是:

SELECT (*) FROM dbo.Word WHERE Text LIKE 'word1%' OR Text LIKE 'word2%' ... 

現在我剛開的單詞列表,並生成SQL查詢的WHERE條款。我創建了一個ISQLQuery,但我不確定如何執行它並取回Word對象的集合。

+1

您是否忘記了示例查詢中的「%」?它有所作爲... – 2011-03-02 22:54:23

+0

對不起,更新! – 2011-03-02 22:56:35

回答

3

由於您使用的是NHibernate,爲什麼不使用爲您提供的工具而不是編寫可能傾向於SQL注入的自定義SQL。

public IList<Word> GetWords(IList<string> filters) 
{ 
    var criteria = Session.CreateCriteria<Word>(); 
    var disjunction = Restrictions.Disjunction(); 
    foreach (var filter in filters) 
    { 
     disjunction.Add(Restrictions.Like("Text", filter, MatchMode.Start)); 
    } 
    criteria.Add(disjunction); 

    return criteria.List<Word>(); 
} 
+0

@Yads當我使用該方法運行時,出現異常:您的SQL語句的某些部分嵌套得太深。重寫查詢或將其分解爲更小的查詢。 – 2011-03-02 23:18:39

+0

@韋斯利,你指定了多少個過濾器? – Vadim 2011-03-02 23:19:33

+0

那麼用戶正在輸入有效的無限文本,我想拉出所有有效的單詞。對於這個特定的測試用例,我認爲我只能做大約200. – 2011-03-02 23:21:21