订购一套翻译,根据一个特定的语言
本文关键字:一个 语言 一套 翻译 | 更新日期: 2023-09-27 18:08:31
假设Product
和ProductTranslation
两个类。该产物具有Product.Title
的性质,是ProductTranslation
的集合。如果我的系统中有两种语言,例如en
和de
,那么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