如何展平实体以在表格中显示

时间:2012-03-31 18:55:21

标签: c# .net entity-framework

鉴于EF实体定义如下

class Person { int PersonID; string Name; string Title; }
class ContactType { int TypeID; string TypeString; } // phone # types - mobile, home, work etc.
class PersonContact { int PersonID, int ContactTypeID, string ContactText; bool IsDefault; }

一个人可以拥有多个手机#,甚至多个手机#的

寻找在表结构中显示所有人的方法如下

PersonID, Name, Title, PrimaryContact, MobileNumber

其中PrimaryContact是IsDefault = true的PersonContact记录

WHERE MobileNumber是带有PersonContact.ContactType = ContactType.TypeID和ContactType.TypeString =“Mobile”的“A”PersonContact记录

注意 -

PrimaryContact是对PersonContact

的查找

MobileNumber也是对PersonContact

的查询

他们可以指向相同的PersonContact记录,也可以根据IsDefault = true而不同

也可能有一个人的多个“移动”PersonContact记录

1 个答案:

答案 0 :(得分:1)

请尝试以下操作。

var result = ctx.Persons
.Select(x => 
new {PersonID = x.PersonID, 
     Name = x.Name,
     Title = x.Title,
     PrimaryContact = x.PersonContacts.FirstOrDefault(y => y.IsDefault == true).Select(t => t.ContactText),
     MobileNumber = x.PersonContacts.FirstOrDefault(z => z.ContactType.TypeString =="Mobile").Select(q => q.ContactText)
     }).ToList();

可悲的是,我认为这可能会导致选择n + 1类型的查询:(