2009-10-27 32 views
1

我有一個非常簡單的Linq to Sql語句(在他的表面上)工作正常。當我檢查它生成的sql代碼時,它試圖檢索所有表中的字段,而不是我剛剛請求的字段。這是正常的做法嗎?奇怪的Linq到Sql錯誤 - 檢索太多的字段

這裏是對的LINQ to SQL查詢的一些psedo代碼: -

var result = (from q in db.Foos 
       where blah blah blah 
       orderby more blah 
       select new ResultThingy 
       { 
        A = q.A, // int 
        B = q.B, // string 
        C = q.Bar.A // int 
        D = q.Bar.B // string 
       }) 
       .Take(5) 
       .ToList(); 

現在,它從表吧...(和其他幾個字段)retreiving所有的值。

這是正常的做法嗎?注意ResultThingy類中的每個屬性是一個簡單類型?

嗯......想法?我對此很困惑。

回答

0

這很正常(仔細查看代碼後)。

由於您使用的是.NET類型(不是實體),因此Linq2SQL必須將所有內容提取到最後選擇。

解決此問題,請改用匿名對象。

IOW:select new { q.A, q.B, C = q.Bar.A, D = q.Bar.B }

+0

真的嗎?哼。真棒我會給這個去。我可以確認我的ResultThingy只是一個_POCO_類,而不是Linq2SQL實體表/類thingy。我會看到當我使用匿名對象時會發生什麼,並在此處報告。 –

+0

它會工作:)你的選擇被視爲一個Enumerable而不是一個Queryable(但它是可查詢的選擇)。 – leppie

+0

沒有 - 仍然試圖提取everthing :(代碼改爲...選擇新的{...}就像你做的,所以我剝離了選擇回來的所有項目,直到我找到哪一個(s)出於興趣,我也試圖剝離它,而不是使用匿名對象(如建議),我用我的POCO。這工作,實際上(直到我包括'壞'屬性,導致所有數據爲該實體,將被返回)。嗯奇怪:)我會給你的點無論如何:) –