根据特定语言订购一组翻译

时间:2011-09-12 06:39:26

标签: c# nhibernate hql

假设有两个班级ProductProductTranslation。该产品具有属性Product.Title,这是一组ProductTranslation。 如果我有两种语言,例如在我的系统中endeProduct.Title的集合将为每个产品保留两个条目。

有没有办法制定一个HQL,它返回一个产品列表,按照特定的语言排序,例如: en?或者这种排序只有在内存中的DB访问之后才可能,例如,与Linq或任何比较器?

任何想法的Thx! sl3dg3

编辑:尽管有订单,我仍然希望收到整套ProductTranslation

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您是指使用特定文化订购,还是根据匹配的翻译进行简单订购。如果是后者,那听起来就像是一个联接。在LINQ中,它将类似于:

string language = "en";
var query = from product in db.Product
            join translation in db.ProductTranslation
                                  .Where(t => t.Language == language)
                 on product.Id equals translation.productId
            orderby translation.Title
            select new { Product = product, translation.Title };

我不知道等效的HQL是什么,但我确信HQL处理连接没有问题...(如果你可以使用LINQ到NHibernate,那当然也应该处理它。)

编辑:只看HQL文档,我怀疑你可以使用

from Product as product
inner join fetch product.Translations translation
where translation.language = 'en'
order by translation.title asc

答案 1 :(得分:0)

我找到了一个可能的解决方案:可以使用双连接来完成:

FROM Product AS product
INNER JOIN FETCH product.Translations ordered_trans
INNER JOIN FETCH product.Translations trans
WHERE ordered_trans.language = 'en'
ORDER BY ordered_trans.Title ASC