2010-01-29 58 views
9

我必須低於2 LINQ語句。他們都返回(看起來)相同的結果集。任何人都可以向我解釋爲什麼我應該用一種方式與另一種方式?它是否如"You say potato, I say potato; you say tomato, I say tomato"那麼簡單?LINQ,我應該加入還是使用嵌套SELECT NEW的

下面是LINQ的兩種口味 - >

1)兩個lets下面是受到充分的ID,並返回NAME私有方法。

var business = from businesse in context.tblBusinesses 
       where businesse.BusinessID == businessID 
       join addresse in context.tblAddresses on businesse.BusinessID equals addresse.BusinessID 
       let stateName = GetStateNameByID(addresse.StateID) 
       let countyName = GetCountyNameByID(addresse.CountyID) 
       select new 
       { 
        businesse.BusinessName, 
        businesse.ContactName, 
        businesse.EmailAddress, 
        addresse.AddressLine1, 
        addresse.AddressLine2, 
        addresse.AddressLine3, 
        addresse.CityName, 
        State = stateName, 
        addresse.ZipCode, 
        addresse.ZipPlus, 
        County = countyName 
       }; 

2)

var query = from businesse in context.tblBusinesses 
      where businesse.BusinessID == businessID 
      select new 
      { 
       businesse.BusinessName, 
       businesse.ContactName, 
       businesse.EmailAddress, 
       Address = from addresse in businesse.tblAddresses 
          select new 
          { 
           addresse.AddressLine1, 
           addresse.AddressLine2, 
           addresse.AddressLine3, 
           addresse.CityName, 
           State = addresse.StateID, 
           addresse.ZipCode, 
           addresse.ZipPlus, 
           County = addresse.tblAdminCounty 
          } 
      }; 

回答

1

你確定他們給出了同樣的結果嗎?

它看起來像第一個示例會將您的Address屬性平鋪到多個屬性中,而第二個示例將具有Address屬性,該屬性本身包含屬性。

但是,否則,我會說加入和「內部選擇」之間的區別將是一個個人喜好的問題。我可能更願意去參加一個連接,因爲我習慣於編寫SQL,並且讓join這個詞讓你的意圖顯而易見。但是我也沒有看到使用內部選擇的問題。

+0

「你確定他們給出了相同的結果嗎?」 - 我想當我說我的意思是說這些字段具有相同的值(即兩者中的State = CA)時,我將不得不考慮這些屬性是否會對我如何使用它們產生影響。 – 2010-01-29 21:57:03

6

當你觀看的SQL Server事件探查,您將看到第二個創造了許多疑問,但第一個獲得在一個查詢中的所有數據。所以第一個更有效率。

+1

對我來說,這真是令人驚訝,因爲我傾向於同意Jon Skeet。 – 2010-01-29 21:53:43

+0

你確定嗎,@NetSide? – devuxer 2010-01-29 21:56:35

+4

是的,我相信,對於每個業務,它都會創建地址的sql查詢。我有類似的經歷。如果我使用LINQ,我總是保持我的sql分析器打開:) – NetSide 2010-01-29 22:06:37

相關問題