transformを使用してDTOのプロパティリストをDTOに取り込む

ActivityLogというエンティティがあります。

    public class ActivityLog : EntityModel
{
    public virtual int activityID { get; set; }
    public virtual int entityType { get; set; }
    public virtual int entityID { get; set; }
    public virtual string entityName { get; set; }
    public virtual int action { get; set; }
    public virtual int parentType { get; set; }
    public virtual int parentID { get; set; }
    public virtual string parentName { get; set; } }
    public virtual string userName { get; set; }
    public virtual int instanceID { get; set; }
    public virtual DateTime? timeStamp { get; set; }
    public virtual DateTime? groupTimeStamp { get; set; }
}

ActivityというDTOクラスがあります。

    public class Activity
{
    public virtual int activityID { get; set; }
    public virtual int entityType { get; set; }
    public virtual int entityID { get; set; }
    public virtual string entityName { get; set; }
    public virtual int action { get; set; }
    public virtual int parentType { get; set; }
    public virtual int parentID { get; set; }
    public virtual string parentName { get; set; }
    public virtual string userName { get; set; }
    public virtual int instanceID { get; set; }
    public virtual DateTime? timeStamp { get; set; }
    public virtual DateTime? groupTimeStamp { get; set; }
    public IList activities { get; set; }
}

I need to fill DTO from Entity with transform also I want to fill IList with the entities which have parentType and parentID. What is the best way to do it, with minimum query?

1
追加された 著者 Gert Arnold,

2 答え

ProjectionListとAliasToBean resulttransformerを使用することができます:

var criteria = session.CreateCriteria ();
criteria.SetProjection (Projections.ProjectionList()
                                     .Add (Projections.Property ("activityID"), "activityID")
                                     ...);

criteria.SetResultTransformer (Transformers.AliasToBean ());

return criteria.List();
1
追加された
私はこれを試しましたが、 IList アクティビティで動作しません@ Firoの答えはより適切です。ご回答ありがとうございます。
追加された 著者 iboware,
IList activityLogs = ...;

var activities = session.Query()
    .WhereRestrictionOn(a => a.Parent.Id).IsIn(activityLogs.Select(al => al.parentID))
    .WhereRestrictionOn(a => a.Parent.Type).IsIn(activityLogs.Select(al => al.parentType))
    .AsEnumerable()
    .ToLookUp(a => new { ParentId = a.Parent.Id, ParentType = a.Parent.Type });

var results = activityLogs
    .Select(al => new ActivityDTO
    {
        activityID = al.activityID,
        entityType = al.entityType,
        ...
        activities = activities[new { ParentId = al.parentID, ParentType = al.parentType }].ToList()
    });
1
追加された
私がautomapperを使用することから私を救うことに感謝します。
追加された 著者 iboware,