gpt4 book ai didi

c# - 从元组到 ICollection 的映射

转载 作者:行者123 更新时间:2023-11-30 01:31:51 25 4
gpt4 key购买 nike

好的,我从 mySql 获取数据,它作为 ReadOnlyCollection <Tuple<DbAudit, DbAuditItem>> 返回。现在我必须从这里映射到我的 AuditAuditItem类。 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 只是一个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;
}

审计项目是:

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

但我发现我的方法行不通。我需要以某种方式获取元组中每个不同的 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));
}
}

关于c# - 从元组到 ICollection 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17355440/

25 4 0