Nhibernate Projection Query TO,使用方法代替属性

时间:2010-08-04 08:41:40

标签: c# nhibernate .net-3.5 interface .net-2.0

这有效:

    projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeCode).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeCode).Path);
    projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeName).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeName).Path);
    projections.Add(Projections.Property(Member<MailOrder>.From(x => x.AssigneeType).QualifiedPath), Member<MailOrderItem>.From(x => x.AssigneeType).Path);            

这不会偏离

projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeCode).QualifiedPath), Member<MailOrderItem>.From(x => x.Code).Path);
projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeName).QualifiedPath), Member<MailOrderItem>.From(x => x.GetName()).Path);
projections.Add(Projections.Property(Member<IMailOrderAssignee>.From(x => x.AssigneeType).QualifiedPath), Member<MailOrderItem>.From(x => x.GetType()).Path);            

这不起作用,因为有两件事:

  1. 接口没有持久性
  2. 方法用于物业方式。
  3. 我在Nhiberante的世界里搜索了很多,但在我看来这很难。

    IMailOrderAssignee是两个rootentity的接口(让我们称之为RootX和RootY)。在我的MailOrders的上下文中,只要我有一个对它的引用+名称及其代码和电子邮件地址,它的根本并不重要。

    IMailOrderAssignee与映射文件中的any-tag映射。 (这很有效,但我也可以用鉴别器来做)。

    我的问题:

    1. 是否可以使用结果 一个投影查询中的方法所以 结果是在DTO?

    2. 是否可以使用合同 在投影查询中(我猜 不...)

1 个答案:

答案 0 :(得分:1)

为什么不在内存中进行投影?

示例:

var criteria = someCriteriaThatReturnsPersistentEntities;
var items = criteria.List<IMailOrderAssignee>();
var projected = items.Select(i => new
                                  {
                                      Prop1 = i.SomeMethod(),
                                      Etc
                                  });