2017-05-26 64 views
0

我有一個場景,我必須檢查表ID列表與給定的字符串列表並獲取所有相關的數據。我知道如何檢索一個相等的條件的數據。Nhibernate等於條件

var criteria = sm.Session.CreateCriteria(GetRegisteredType<Data>()); 

criteria = criteria.Add(Expression.Eq("Id", "9999")); 

我有我需要檢查Id列的字符串列表。 任何人都可以幫助我嗎?

+0

([使用標準值類型的列表中的nhibernate查詢]的可能的複製https://stackoverflow.com/questions/28094096/nhibernate-query-using-criteria-for-list-of-value -type) –

+0

你在上面的鏈接問題中有你的答案。如果您需要使用子查詢來完成此操作,請參閱[this one](https://stackoverflow.com/q/30242846/1178314)。 –

回答

1

讓我們假設你有名單:

var list = new string[] { "9999", "1111" }; 
  1. 標準

    Session.CreateCriteria(GetRegisteredType<Data>()).Add(Restrictions.InG("Id", list)); 
    
  2. QueryOver

    Session.QueryOver<Data>().Where(x => x.Id.IsIn(list)); 
    
  3. NHibernate.LINQ

    Session.Query<Data>().Where(x => list.Contains(x.Id)) 
    
1

您是否需要使用基於ICriteria的查詢?如果不是這樣,基於LINQ查詢看起來是這樣的:

var results = 
    sm.Session 
     .Query<Data>() 
     .Where(d => listOfStrings.Contains(d.Id)) 
     .ToList(); 

但是,你需要警惕你的字符串列表的大小,因爲它們將作爲參數傳遞,並會受到限制。