2011-09-16 40 views
2

我總是偏好lambda表達式對集合執行操作。但是我可以使用比Lambda表達式更簡單的LINQ來達到同樣的效果。但是,我仍然對抽象層次&中的頂級問題感到困惑,原因何在?抽象層次Linq或Lambda表達式中的哪個更高

+1

http://stackoverflow.com/questions/7391370/is-it-linq-or-lambda/7391389#7391389和http://stackoverflow.com/questions/5327897/difference-between- linq-queries-lambda-expression/5327982#5327982 使用LINQ查詢,使代碼更簡單,更易讀;不要在沒有的地方使用它們。編譯器將兩者視爲lambda表達式。 –

+0

你應該使用任何更方便的東西,而不是任何具有更高抽象層次的東西(不管它是什麼意思)。 – Vlad

回答

11

我懷疑是「LINQ」你的意思是「查詢表達式」:

var query = from x in y 
      where x.Foo 
      select x.Bar 

我的「lambda表達式」懷疑你的意思是直接調用擴展方法:

var query = y.Where(x => x.Foo) 
      .Select(x => x.Bar); 

這些都是真的 LINQ ...

查詢表達式在略微更高a我認爲這是一個抽象級別,並且需要進行更多的工作才能實現真正的操作......但不是非常顯着,因爲轉換過程相當機械。

+0

+1因爲我無法理解這個問題......但是答覆非常明確:-) :-) – xanatos

+0

+1,因爲它們都被稱爲LINQ。很遺憾,很多人都不明白這一點。 –

+0

@Hanan:這兩者都不是被稱爲* LINQ,而是兩種方法都是LINQ的一部分。你以任何方式使用LINQ,實際上也是相同的生成代碼。 –

3

LINQ表達式被編譯器翻譯成相應的擴展方法。 Lambda表達式是BCL的一部分,而LINQ語法只是由編譯器翻譯的語法糖,它不是發射的IL的一部分。

+1

我不介意如何list.Select(..不是LINQ? –

+1

nitpick:不是lambda表達式只是編譯器糖嗎?他們會被翻譯成匿名方法或表達式樹;它們不存在作爲發射IL中的「lambda表達式」 – LukeH

2

我猜你的問題實際上是關於查詢語法中的Linq(從carList中選擇car.Brand)和方法語法(carList.Select(car => car.Brand))之間的區別? 在這種情況下,很容易回答:Linq的查詢語法只是語法糖,並且會被翻譯成方法調用。因此,就抽象層次而言,它們幾乎完全相同。查詢語法對普通人來說看起來更容易理解。