Hellow Community!
您能否解释一下Coordinator和Shaper如何为实现工作?
特别感兴趣的是嵌套集合的分层读取。
更多细节,我需要简化Shaper + Coordinator的实现来转换源:
var source = new[]
{
new Record { Id = 1, Subject = "How to", PartyId = 81, FirstName = "Dart Vaider", LabelId = 51, Tag = "Important" },
new Record { Id = 1, Subject = "How to", PartyId = 81, FirstName = "Dart Vaider", LabelId = 52, Tag = "Urgent" },
new Record { Id = 1, Subject = "How to", PartyId = 82, FirstName = "Lea Organo", LabelId = 51, Tag = "Important" },
new Record { Id = 1, Subject = "How to", PartyId = 82, FirstName = "Lea Organo", LabelId = 52, Tag = "Urgent" },
new Record { Id = 2, Subject = "Just do it", PartyId = 83, FirstName = "Luk Skywalker", LabelId = 51, Tag = "Important" },
new Record { Id = 2, Subject = "Just do it", PartyId = 83, FirstName = "Luk Skywalker", LabelId = 52, Tag = "Urgent" },
new Record { Id = 2, Subject = "Just do it", PartyId = 83, FirstName = "Luk Skywalker", LabelId = 55, Tag = "Interesting" },
new Record { Id = 2, Subject = "Just do it", PartyId = 84, FirstName = "Han Solo", LabelId = 51, Tag = "Important" },
new Record { Id = 2, Subject = "Just do it", PartyId = 84, FirstName = "Han Solo", LabelId = 52, Tag = "Urgent" },
new Record { Id = 2, Subject = "Just do it", PartyId = 84, FirstName = "Han Solo", LabelId = 55, Tag = "Interesting" },
};
到考虑以下结构的Email
列表
public class Email
{
public int Id { get; set; }
public string Subject { get; set; }
public ICollection<Tag> Tags { get; set; }
public ICollection<Contact> Contacts { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Text { get; set; }
}
public class Contact
{
public int Id { get; set; }
public string FirstName { get; set; }
}
Asuming,Record的实际实现 - &gt;电子邮件,记录 - &gt;联系,记录 - &gt;标签是原始的,不需要专注于此。
非常感谢您的帮助
答案 0 :(得分:0)
我认为该示例是您实际数据的简化版本,但似乎不清楚您要对Shaper
和Coordinator
做些什么。
将我们的source
集合转换为集合Email
对象的示例可以使用linq完成。
var emails = source.GroupBy(x => x.Id).Select(x => new Email()
{
Id = x.Key,
Subject = x.Select(z => z.Subject).First(),
Contacts = x.GroupBy(g => g.PartyId)
.Select(s => new Contact() {Id = s.Key, FirstName = s.Select(z => z.FirstName).First()}).ToList(),
Tags = x.GroupBy(g => g.LabelId)
.Select(s => new Tag() {Id = s.Key, Text = s.Select(z => z.Tag).First()}).ToList()
}).ToList();