我有类似这样的结构:
public class Entity
{
public int Id { get; set; }
public IDictionary<string, EntityLocale> Locales { get; set; }
}
public class EntityLocale
{
public string Name { get; set; }
}
public class EntityMap : ClassMap<Entity>
{
public EntityMap()
{
HasMany(x => x.Locales)
.AsMap<string>("Locale")
.Component(
c => {
c.Map(x => x.Name);
}
);
}
}
我想用“en”键接收所有产品语言环境的名称。使用 linq 它将是:
var names = Session.QueryOver<Product>().List().Select(x => x.Locales["en"].Name).ToList();
如何使用 nhibernate 实现这一目标?(我不在乎它是 QueryOver 还是 Criteria api,我只是不想选择所有内容)。
更新
我想出了以下丑陋的 hack(我不满意,我不想在我的代码中使用任何 sql):
var names = Session.CreateSQLQuery("SELECT Name FROM ProductLocales WHERE Locale = 'en'").List<string>()