我想在使用LINQ(特別是,LINQ到實體)時實現MVC。我會這樣做的方式是讓Controller使用LINQ生成(或調用生成的)結果集,然後將其返回給View以顯示數據。問題是,如果我這樣做:簡單的方法來返回匿名類型(使MVC使用LINQ可能)
return (from o in myTable select o);
所有的列從數據庫中讀取,即使我不希望那些(潛在的幾十個)。而且 - 更重要的是 - 我無法做這樣的事情:
return (from o in myTable select new { o.column });
因爲沒有辦法使匿名類型的類型安全的!我知道肯定沒有很好,乾淨的方式做到這一點在3.5(this不乾淨...),但4.0呢?有沒有計劃,甚至提出?沒有像LINK或者類型安全的匿名返回值這樣的東西(在我看來,編譯器當然應該可以做到這一點),似乎幾乎不可能將Controller從View中分離出來。
當您使用orm時,您應該習慣於讓sql選擇表的所有列。如果您編寫的查詢只選擇少數幾個,那麼您最好還是先使用sql。如果你的對象有幾十個屬性,那就是你的問題。你的物體應該更小,你應該考慮如何解決這個問題。匿名類型不應該被傳遞,特別是不作爲視圖的模型。 – 2010-03-17 07:26:38
@Mattias:不幸的是,生活並不那麼簡單。例如,考慮從不同表中選擇幾列的情況,包括使用內部LINQ查詢選擇的對象數組。據我所知,沒有辦法將它作爲單個EF對象返回 - 它*具有*爲新類型,並且爲每個這樣的查詢定義新的具體類型是非常麻煩的。 – 2010-03-17 13:26:51
聽起來像你有一個非常糟糕的模型。你的對象應該有它需要的引用,你可以在EF中使用「Include()」方法(以便加載這些數據)。如果您不再將數據視爲不同表格中的不同列,並且更多地關注您的模型(更多面向對象),它很可能會更容易處理。底線:如果你覺得需要傳遞匿名類型,你很可能會做其他事情。 – 2010-03-17 14:02:21