2012-03-31 89 views
0

定義鑑於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是PersonContact記錄與ISDEFAULT =真

WHERE移動電話號碼是 「A」 PersonContact記錄與PersonContact.ContactType = ContactType.TypeID和ContactType.TypeString = 「移動」

注 -

PrimaryContact是查找到PersonContact

MobileNumber也是查找到PersonContact

他們可以指向相同的PersonContact記錄或可能會有所不同取決於IsDefau LT =真

也有可能是多個「移動」 PersonContact一個人

回答

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種查詢類型:(

+0

PrimaryContact及移動電話號碼可能是PersonContact表 – Kumar 2012-03-31 19:15:18

+0

兩個差紀錄@Kumar您的問題不清晰顯示的關係。 。請問你可以拿出來嗎?它會幫助我提供更好的答案 – scartag 2012-03-31 19:16:57

+0

更新Q,希望現在更清楚,基本上可以有多個手機號碼給一個人,其中只有一個可以有IsDefault = true set將顯示在PrimaryContact或者IsDefault = true可以爲工作電話#設置,在這種情況下,PrimaryContact和MobileNumber將在拼合表中顯示不同的# – Kumar 2012-03-31 19:24:45