Web services NHibernate到DTO的投影

Web services NHibernate到DTO的投影,web-services,nhibernate,orm,dto,projection,Web Services,Nhibernate,Orm,Dto,Projection,我不熟悉NHibernate投影。我试图使用它,以便返回一个列表,而不是IList。到目前为止,我还没有太多的机会向DTO投影。我有以下查询和域对象。所以,首先,我只是想得到一份订单列表,给一个员工ID。我正在遍历结果列表并将其添加到列表中,因为我希望能够序列化此列表。有人能告诉我我离投影有多远吗?我已经搜索并找到了一些与我自己不相似的例子。基本上。。我只想创建一个DTO列表 谢谢 public List<EmployeeOrder> GetEmployessOrdersDTO(in

我不熟悉NHibernate投影。我试图使用它,以便返回一个列表,而不是IList。到目前为止,我还没有太多的机会向DTO投影。我有以下查询和域对象。所以,首先,我只是想得到一份订单列表,给一个员工ID。我正在遍历结果列表并将其添加到列表中,因为我希望能够序列化此列表。有人能告诉我我离投影有多远吗?我已经搜索并找到了一些与我自己不相似的例子。基本上。。我只想创建一个DTO列表

谢谢

public List<EmployeeOrder> GetEmployessOrdersDTO(int empid)
        {
        var emporders = new List<EmployeeOrder>();

        ICriteria criteriaSelect = NHibernateSessionManager.Instance.GetSession().CreateCriteria(typeof (Orders))
            .CreateCriteria("Employees")
            .Add(Expression.Eq("EmployeeID", empid));

        criteriaSelect.SetProjection(
            Projections.ProjectionList()
            .Add(Projections.Property("Products"), "OrderedProducts"));


        criteriaSelect.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(EmployeeOrder)));
        criteriaSelect.List<EmployeeOrder>();

        foreach (var order in emporders)
        {
            emporders.Add(order);
        }
        return emporders;
    }
public List getEmployeesOrdersDTO(int-empid)
{
var emporders=新列表();
ICriteria criteriaSelect=NHibernateSessionManager.Instance.GetSession().CreateCriteria(订单类型))
.CreateCriteria(“员工”)
.Add(Expression.Eq(“EmployeeID”,empid));
criteriaSelect.SetProjection(
投影。投影列表()
.Add(Projections.Property(“产品”),“OrderedProducts”);
criteriaSelect.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(EmployeeOrder));
criteriaSelect.List();
foreach(EMP订单中的var订单)
{
emporders.Add(订单);
}
退回订单;
}
订单:

 public class Orders
{
    public virtual int OrderID { get; private set;}
    public virtual string CustomerID { get; set; }
    public virtual DateTime OrderDate { get; set; }
    public virtual DateTime RequiredDate { get; set; }
    public virtual DateTime ShippedDate { get; set; }
    public virtual Employees Employee { get; set; }
    public virtual IList<Products> Products { get; private set; }

}
公共类命令
{
公共虚拟整数OrderID{get;private set;}
公共虚拟字符串CustomerID{get;set;}
公共虚拟日期时间OrderDate{get;set;}
所需公共虚拟日期时间日期{get;set;}
公共虚拟日期时间ShippedDate{get;set;}
公共虚拟雇员雇员{get;set;}
公共虚拟IList产品{get;private set;}
}
雇员:

public class Employees
{

    public virtual int EmployeeID { get; private set;}
    public virtual string LastName { get; set;}
    public virtual string FirstName { get; set;}
    public virtual string City { get; set; }
    public virtual DateTime HireDate { get; set; }
    public virtual string Title { get; set; }
    public virtual IList<Orders> Orders { get; private set; }

}
公共类员工
{
公共虚拟int EmployeeID{get;private set;}
公共虚拟字符串LastName{get;set;}
公共虚拟字符串FirstName{get;set;}
公共虚拟字符串City{get;set;}
公共虚拟日期时间HireDate{get;set;}
公共虚拟字符串标题{get;set;}
公共虚拟IList命令{get;private set;}
}
雇员命令:

public class EmployeeOrder
{
    public virtual string EmployeeName { get; set; }
    public virtual string EmployeeTitle { get; set; }
    public virtual DateTime RequiredDate { get; set; }
    public virtual List<Products> OrderedProducts { get; set; }
}
公共类EmployeeOrder
{
公共虚拟字符串EmployeeName{get;set;}
公共虚拟字符串EmployeeTitle{get;set;}
所需公共虚拟日期时间日期{get;set;}
公共虚拟列表OrderedProducts{get;set;}
}
更改

criteriaSelect.List<EmployeeOrder>();
criteriaSelect.List();

List employeeOrders=criteriaSelect.List()作为列表;

在nHibernate 2.1中,.List()方法实际上已经返回了一个列表类型,因此您可以强制转换:

var list = (List<EmployeeOrder>)criteriaSelect.List<EmployeeOrder>();
var list=(list)criteriaSelect.list();
但是,如果您希望将来安全,并且不依赖基于当前nHibernate实现的假设,我将编写一个接受ICriteria的扩展方法:

  public static List<T> ToList<T>(this ICriteria criteria)
  {
    return criteria.List<T>().ToList();
  }
公共静态列表列表(此ICriteria标准)
{
返回条件.List().ToList();
}
  public static List<T> ToList<T>(this ICriteria criteria)
  {
    return criteria.List<T>().ToList();
  }