[英]multiple table join optimizing performance
我有一個項目,該項目使用具有用戶和聯系表的數據庫。 它們如下所示:
UserTable:
UserID FirstName LastName
1 John Smith
2 Ted Raimi
3 Brian Park
ContactTable:
ContactID UserID ContactType PhoneNum
1 1 Home 5555555555
2 1 Work 4444444444
3 2 Home 3333333333
並且此表的示例右連接將是
UserID FirstName ContactID ContactType PhoneNum
1 John 1 Home 5555555555
1 John 2 Work 4444444444
2 Ted 3 Home 3333333333
3 Brian
我的C#業務對象看起來像:
public class User
{
public int UserID{get;set;}
public string FirstName{get;set;}
public string LastName{get;set;}
public IEnumerable<Contact> Contacts {get;set;}
}
public class Contact
{
public int ContactID{get;set;}
public int UserID{get;set;}
public string ContactType{get;set;}
public string PhoneNum{get;set;}
}
所以我的問題是:合並這些數據的最佳方法是什么? 我是不是該
1)通過SQL執行此操作,也許使用PIVOT或CONCAT將John Smiths合並為1行,然后從數據表輸出中進行管理以適合我的對象? 這意味着輸出可能如下所示:
UserID FirstName HomePhoneNum WorkPhoneNum
1 John 5555555555 4444444444
2 Ted 3333333333
3 Brian
我會以這種方式丟失數據(contactID),並且很難擴展
2)進行多個SQL調用,而不只是1個? 當我列出“用戶”列表時,我還必須列出“聯系人”列表,然后通過代碼將其加入?
3)僅使用1個SQL調用,進行原始的右連接,並通過LINQ優點對用戶進行選擇,並使用適用的行填寫其聯系數據?
我傾向於#2,但我想確保自己不會錯過其他選擇。 我覺得讓SQL語句更復雜(#1)是個壞主意,但是我擔心用戶表變大時#2和#3的處理時間。 有沒有人建議最好的前進方向?
我想知道為什么要合並數據。
您的班級中已經有IEnumerable<Contact> Contacts
屬性。
您只需要在LINQ調用上使用include方法。
var lUsers = from usr in dbcontext.User.Include(t => t.Contacts)
select usr;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.