订购一套翻译,根据一个特定的语言

本文关键字:一个 语言 一套 翻译 | 更新日期: 2023-09-27 18:08:31

假设ProductProductTranslation两个类。该产物具有Product.Title的性质,是ProductTranslation的集合。如果我的系统中有两种语言,例如ende,那么Product.Title的集合将为每种产品保存两个条目。

是否有任何方法来制定一个HQL,它返回给我一个产品列表,由特定的语言排序,例如en ?或者这种排序只可能在内存中的db访问之后,例如使用Linq或任何比较器?

谢谢你的建议!sl3dg3

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

订购一套翻译,根据一个特定的语言

不清楚您是指使用特定文化进行排序,还是仅仅根据匹配的翻译进行简单排序。如果是后者,那听起来就像一个连接。在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

我想出了一个可能的解决方案:它可以通过双连接来完成:

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