C# 从元组到ICollection的映射

C# 从元组到ICollection的映射,c#,mysql,tuples,icollection,C#,Mysql,Tuples,Icollection,好的,我从mySql获取数据,它作为只读集合返回。现在我必须从这个映射到我的Audit和AuditItem类。审核部分的工作方式如下: return audits.Select((AuditMapper.Map)).ToReadOnlyCollection(); 在auditmapper中会发生这种情况 public static Audit Map(Tuple<DbAudit, DbAuditItem> source) { if (source == null) re

好的,我从mySql获取数据,它作为只读集合返回。现在我必须从这个映射到我的
Audit
AuditItem
类。
审核
部分的工作方式如下:

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

但我知道我的方式是行不通的。我需要以某种方式获取元组中每个不同的Item1,并将每个对应的Item2放入一个集合,该集合将进入审计项…

我最终以一种迂回的方式完成了这项工作,如下所示:

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));
                }
            }
Audit Audit=null;
List auditItemsList=新列表();
List totalAudits=新列表();
ulong thisId=0;
foreach(审计中的元组)
{
if(tuple.Item1.Id==thisId)
{
添加(AuditItemMapper.Map(tuple.Item2));
}
其他的
{
if(thisId!=0&&audit!=null)
{
添加(新审计(Audit.applicationken、Audit.AuditKind、Audit.DateCreated、Audit.ContainerName、Audit.ContainerItemId、Audit.UserId、auditItemsList));
auditemslist.Clear();
}
thisId=tuple.Item1.Id;
audit=(AuditMapper.Map(tuple.Item1));
添加(AuditItemMapper.Map(tuple.Item2));
}
}

什么叫“Item2.Select不工作”?编译错误?不是预期的结果?例外?42?您是否尝试过
source.Item2
?此外,元组中有一个AuditItem,但将它们视为一个集合。我们需要更多关于两个类关系性质的信息,请发布审计和审计项构造函数代码。
public AuditItem(string name, string data, string oldData)
    {
        m_name = name;
        m_data = data;
        m_oldData = oldData;
    }
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));
                }
            }