Shaper和Coordinator如何在Entity Framework中工作

时间:2018-04-20 14:23:51

标签: c# entity-framework architecture

Hellow Community!

您能否解释一下CoordinatorShaper如何为实现工作?

特别感兴趣的是嵌套集合的分层读取。

更多细节,我需要简化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;标签是原始的,不需要专注于此。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为该示例是您实际数据的简化版本,但似乎不清楚您要对ShaperCoordinator做些什么。

将我们的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();