私はこれに似た構造を持っています:
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 であるかは気にしません。すべてを選択したくないだけです)。
アップデート
私は次の醜いハックを思いつきました(これには満足していません。コードにSQLを入れたくありません):
var names = Session.CreateSQLQuery("SELECT Name FROM ProductLocales WHERE Locale = 'en'").List<string>()