2011-04-28 46 views
0

讓我們說我有一個對象,其中包含一些其他對象的IList。是否有可能有效地找到具有相同IList的對象?你會用什麼HQL或ICriteria。我看不到使用SQL的簡單方法。nhibernate - 使用相同的列表查找對象

謝謝。

基督教

PS:

只是爲了澄清。我有一個A類包含:

public virtual string Text { get; set; } 

B類包含:

public virtual IList<A> As { get; set; } 

我想找到一個包含每個對象:

A,A1,BLA

在這個命令。逗號表示列表中的特定文本元素。

PPS:

通過示例使用的ICriteria的發現似乎不工作:

NHibernateSession.Current.CreateCriteria(typeof(B)).Add(Example.Create(b)).List(); 

這裏B是列表中包含的

回答

0

我會用特定的情況下B的一個實例Linq to NHibernate。我已經取得了成功。

從那裏你可以做一個加入。如果需要,您可以加入多個屬性。這可能不是一個完美的例子,因爲我剛剛完成了它,但它應該給你這個想法。

var query = 
    from c in customers 
    join e in employees 
     on new { c.Id, c.Address1 } equals new { e.Id, e.Address1 } 
    select new 
    { 
     c.Id, 
     c.Name, 
     c.Address1, 
     e.StartDate 
    }; 

您可以使用LinqPad(谷歌它)來測試

對於NHibernate的更多的幫助,我已經在讀Ayende's site很多好的東西。

+0

感謝。我想我的問題還不夠清楚 - 請參閱PS。 – cs0815 2011-04-28 16:18:38

0

我認爲你需要幾件事情。您需要確保您已將映射爲「list」,以便您可以擁有可用於測試訂單的索引。你需要做一個加入一個

所以,你可以做

NHibernateSession.Current.CreateCriteria<B>() 
    .CreateAlias("As", "a") 
    .Add(Example.Create(b)) 
+0

謝謝。我已經嘗試過,但沒有奏效。我目前使用Fluent NHibernate和這個映射:mapping.HasManyToMany(x => x.As).Table(「BA」); – cs0815 2011-04-29 11:38:00

+0

這現在可以工作:mapping.HasManyToMany(x => x.As).Table(「BAs」)。AsList(index => index.Column(「SortOrder」)); – cs0815 2011-04-29 11:53:05

+0

它生成的SQL或錯誤是什麼?這意味着什麼'它不起作用'? – Vadim 2011-04-29 14:45:01

相關問題