2016-06-10 42 views
0

使用的第一個代碼的結果更快「加入下面的代碼有相同的結果,但無論是在將

但在第二代碼不使用「加入

請注意,結果是一樣的。

所以我有幾個問題

  • 哪個更好

  • 哪一個是更快

CODE01:

(from Member in dContext.TB_FamilyCardMembers 
    select new 
    { 
     Member.FamilyCard_ID, 
     Member.TB_FamilyCard.NoFamilyCard, 
     CardType = Member.TB_FamilyCard.Is_Card == true ? "دفتر عائلة" : "بيان عائلي", 
     FirsN = Member.TB_Person.FirstName, 
     FatherN = Member.TB_Person.FatherName == null ? SelectPersonByID(int.Parse(Member.TB_Person.Father_ID.ToString())).FirstName : Member.TB_Person.FatherName, 
     LastN = Member.TB_Person.LastName == null ? SelectPersonByID(int.Parse(Member.TB_Person.Father_ID.ToString())).LastName : Member.TB_Person.LastName, 
     MotherN = Member.TB_Person.MotherName == null ? SelectPersonByID(int.Parse(Member.TB_Person.Mother_ID.ToString())).FirstName : Member.TB_Person.MotherName, 
     MotherLN = Member.TB_Person.MotherLastName == null ? SelectPersonByID(int.Parse(Member.TB_Person.Mother_ID.ToString())).LastName : Member.TB_Person.MotherLastName 
    }).ToList(); 

______________________________________________ 

Code02:

(from Member in dContext.TB_FamilyCardMembers 
join Card in dContext.TB_FamilyCards on Member.FamilyCard_ID equals Card.ID 
join Person in dContext.TB_Persons on Member.Person_ID equals Person.ID 
select new 
{ 
    Member.FamilyCard_ID, 
    Card.NoFamilyCard, 
    CardType = Card.Is_Card == true ? "دفتر عائلة" : "بيان عائلي", 
    FirsN = Person.FirstName, 
    FatherN = Person.FatherName == null ? SelectPersonByID(int.Parse(Person.Father_ID.ToString())).FirstName : Person.FatherName, 
    LastN = Person.LastName == null ? SelectPersonByID(int.Parse(Person.Father_ID.ToString())).LastName : Person.LastName, 
    MotherN = Person.MotherName == null ? SelectPersonByID(int.Parse(Person.Mother_ID.ToString())).FirstName : Person.MotherName, 
    MotherLN = Person.MotherLastName == null ? SelectPersonByID(int.Parse(Person.Mother_ID.ToString())).LastName : Person.MotherLastName 
}).ToList(); 
+0

這是真的http://codereview.stackexchange.com/ – Sudsy

+0

的加入問題需要大量的資源,因此效率較低。 – jdweng

回答

0

條條大路通羅馬

僅僅因爲Linq代碼中沒有連接,並不意味着最終查詢中沒有連接。

一旦你使用

Member.TB_Person.FirstName 

的Linq-2-SQL將發佈可能添加加入到生成的SQL。

許多編碼員明確地添加聯接,因爲他們以真正的SQL類型編碼LINQ-2-SQL。大部分時間不需要(假設正確的外鍵已經到位),因爲L2S會爲你加入聯合。

要真正回答你的問題,你需要剖析生成的實際SQL。只有這樣你才能看到實際發送到數據庫的查詢中的差異。機會是相同的。如果不是,請選擇兩者中最有效的。

如何查看SQL: How to view LINQ Generated SQL statements?

相關問題