質問

それは)私はSession.CreateCriteria(からの復帰に何をしたい列を選択することは可能ですか?

EGZ:ます。

var x = session.CreateCriteria();
    x.CreateAlias("EmployeePosition", "employeePosition");
    x.Add(Restrictions.Eq("employeePosition.Name", "Developer"));
と行全体のダウンロードを避けるために、「姓を選択する」のようなものを追加する方法があります。

役に立ちましたか?

解決

あなたが必要とする唯一のプロパティを持つクラスを作り、多くの場合、これは{ID、ラベル}のように要約クラスであり、あなたは、たとえばリストでは、単純型を必要とするどこにでもそれを再利用したいです。返却する列を定義するためにProjectionListを使用してください。次に、あなたの単純型に結果を変換するTransformers.AliasToBeanを使用します。

ProjectionList projectionList = Projections.ProjectionList();
projectionList.Add(Projections.Property("EmployeeID"), "Id");
projectionList.Add(Projections.Property("EmployeePosition"), "Label");
var x = DetachedCriteria.For(Employee);
x.SetProjection(projectionList);
x.SetResultTransformer(Transformers.AliasToBean(SimpleType)));
return x.GetExecutableCriteria(UnitOfWork.CurrentSession).List<SimpleType>();

他のヒント

あなたは、この使用して投影を行うことができます

IList<Object[]> list = session.CreateCriteria(typeof(Employee))
  .SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("FirstName"))
    .Add(Projections.Property("LastName"))
  ).List<Object[]>();

  foreach( Object[] person in list )
  {
    String firstName = person[0];
    String lastName = person[1];
  }

だけでなく他の投影用NHibernate.Expressions名前空間を確認します。

私はNHibernateのに試してLINQのを与えることを示唆しています。それはあなたが非常に自然な方法で求めているものをやらせます。

あなたが実際のクラスを持っている場合、あなたがしたい、ダナのの答えに追加するにはしてそれを読んで、あなたは、投影とTransformers.AliasToBeanを使用することができます。 NHibernateのは、一致するフィールド名からの値でオブジェクトのプロパティを移入しようとします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top