2010-10-12 53 views
0

這兩個Lambda表達式之間有什麼區別?而第二個似乎更緊湊,我應該總是這樣做?這兩個lambda表達式有區別嗎?

DataContext.Employee.Where(c=>c.id==check_id && c.username==user_name).Select(c=>c.Name).FirstOrDefault(); 

DataContext.Employee.FirstOrDefault(c=>c.id==check_id && c.username==user_name).Name; 
+0

順便說一句 - 可能希望將「c.username = user_name」更改爲「c.username == user_name」 – 2010-10-12 15:08:32

回答

15

第二個版本可以拋出一個NullReferenceException如果一個匹配元件沒有找到與該類型的默認值是null

第一個版本沒有這個問題。

+0

要添加到此,兩個語句是完全不同的。首先是先進行過濾,然後再進行第一次過濾。其次是挑選第一條記錄,然後嘗試將其與過濾條件進行匹配。意圖是完全不同的,第二個似乎給了錯誤的業務結果(技術上它會起作用)。 – Pradeep 2010-10-12 15:55:31

+2

@Pradeep:你的意思是'FirstOrDefault'條件返回第一個元素,如果它匹配條件?這不是真的。 'FirstOrDefault'條件返回第一個元素THAT匹配條件,它可以是第二個或任何其他,只是第一個匹配。所以業務結果可以,只有'NullReferenceException'提到的問題。 – NOtherDev 2010-10-13 08:08:21