2012-04-05 34 views
5

Include基於字符串的過載我們指定包括集合,然後引用一個簡單地通過正確的順序指定有關導航性能下降水平:包括使用Lambda表達式

query.Include("Level1Collection.Level2Reference"); 

但是,爲什麼使用過載時,的使用lambda表達式Include,必須同時我們也使用Select語句能夠指定上述查詢:

query.Include(e => e.Level1Collection.Select(l1 => l1.Level2Reference)). 

爲什麼不以下工作:

query.Include.(e => e.Level1Collection.Level2Reference) 

謝謝

回答

7

因爲編譯器無法識別的情況下改變了集合屬性的含義從一個集合是一個替身集合中的對象。而且,由於編譯器不會改變根據上下文,同樣沒有智能感知。

當你喂包括串聲明,它知道它必須使用反射來了解性能,反正有和沒有類型檢查的編譯。基本的方法都知道,當它的字符串在集合屬性後看到一個點,它應該在集合中解析對象的屬性下一個引用的屬性,而不是集合本身(在這種情況下,「Level2Reference」)。

或者換句話說:它的魔力。 :)

+0

使得sense.Much理解 – user702769 2012-04-05 20:39:04