【问题标题】:Mapping from Tuple to ICollection从元组映射到 ICollection
【发布时间】:2013-06-28 00:32:47
【问题描述】:

好的,我从 mySql 获取数据,它以 ReadOnlyCollection<Tuple<DbAudit, DbAuditItem>> 的形式返回。现在我必须从这个映射到我的AuditAuditItem 类。 Audit 部分的工作方式如下:

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

在 auditmapper 中会发生这种情况。

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 只是一个 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 放入一个集合中,该集合将进入审计项...

【问题讨论】:

  • “Item2.Select 不起作用”是什么意思?编译错误?不是预期的结果?例外? 42?
  • 你试过source.Item2吗?
  • 另外,元组中有一个 AuditItem,但将它们视为一个集合。我们需要更多关于两类关系性质的信息
  • 能否请您发布 Audit 和 AuditItem 构造函数代码。

标签: c# mysql tuples icollection


【解决方案1】:

我最终以这样的迂回方式进行:

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));
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多