2011-04-28 58 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

相关问题