0

わかりましたので、mySql からデータを取得すると、 ReadOnlyCollection として返され<Tuple<DbAudit, DbAuditItem>>ます。ここで、これから my AuditandAuditItemクラスにマップする必要があります。そのAudit部分は次のように機能しています:

return audits.Select((AuditMapper.Map)).ToReadOnlyCollection();

そして、監査マッパーでこれが起こります。

public static Audit Map(Tuple<DbAudit, DbAuditItem> source)
{
  if (source == null)
    return null;

  return new Audit(
    null,
    (AuditKind) source.Item1.AuditKindId,
    source.Item1.DateCreated,
    null,
    source.Item1.ContainerItemId,
    source.Item1.UserId,
    Item2.Select(AuditItemMapper.Map).ToReadOnlyCollection()
);
}

しかし、 Item2.Select... 行が機能していないので、他にどのように書くべきかわかりません。何か案は?

編集: まず、Item2 行は source.Item2.Select であると想定されています。

また、各 Item2 は 1 つの auditItem にすぎず、コレクションに追加しようとしているため、ロジックが意味をなさないことにも気付きました。監査項目は次のようになります。

public Audit(string applicationToken, AuditKind auditKind, DateTime dateCreated, string containerName, string containerItemId, int userId, ICollection<AuditItem> auditItems)
    {
        m_applicationToken = applicationToken;
        m_auditKind = auditKind;
        m_dateCreated = dateCreated;
        m_containerName = containerName;
        m_containerItemId = containerItemId;
        m_userId = userId;
        m_auditItems = auditItems;
    }

auditItem は次のとおりです。

public AuditItem(string name, string data, string oldData)
    {
        m_name = name;
        m_data = data;
        m_oldData = oldData;
    }

しかし、私が持っている方法はうまくいかないことがわかります。タプルの個別の Item1 を取得し、対応する各 Item2 をコレクションに入れ、監査項目に入れる必要があります...

4

1 に答える 1

0

私は最終的に次のように回り道をしました:

Audit audit = null;
            List<AuditItem> auditItemsList = new List<AuditItem>();

            List<Audit> totalAudits = new List<Audit>();

            ulong thisId = 0;

            foreach (Tuple<DbAudit, DbAuditItem> tuple in audits)
            {
                if (tuple.Item1.Id == thisId)
                {
                    auditItemsList.Add(AuditItemMapper.Map(tuple.Item2));
                }
                else
                {
                    if (thisId != 0 && audit != null)
                    {
                        totalAudits.Add(new Audit(audit.ApplicationToken, audit.AuditKind, audit.DateCreated, audit.ContainerName, audit.ContainerItemId, audit.UserId, auditItemsList));
                        auditItemsList.Clear();
                    }
                    thisId = tuple.Item1.Id;
                    audit = (AuditMapper.Map(tuple.Item1));
                    auditItemsList.Add(AuditItemMapper.Map(tuple.Item2));
                }
            }
于 2013-06-28T17:48:38.980 に答える