見下面兩個功能相同的查詢,SQL和lambda版本:Linq。如何在Linq(sql語法)查詢中使用AsEnumerable? EF4.1
from a in Lines.AsEnumerable()
where a.LineId == SomeGuid
select a
-
Lines.AsEnumerable()
.Where(a => a.LineId == SomeGuid)
.Select(a => a)
兩個查詢將被轉換成SQL不具有WHERE語句,像
SELECT * FROM Line
在lambda中,我可以方便地在Where子句之後放置AsEnumerable,並且生成的SQL將具有WHERE子句。因此,拉姆達查詢會是這樣:
Lines
.Where(a => a.LineId == SomeGuid)
.AsEnumerable()
.Select(a => a)
並導致SQL是SELECT * FROM行,其中LineId = @參數
問: 我如何做到這一點使用LINQ SQL語法?換句話說,我希望我的結果SQL語句具有WHERE子句。我想避免從表格中拉出所有記錄。我試圖在查詢中的不同位置放置AsEnumerable,但是我未能使其工作。
編輯:
在簡單的語句把AsEnumerable在年底會的工作,但如果你使用投影,那麼EF抱怨(notsupported時例外:複雜類型不能構建...) 所以,
(from a in Lines
where a.LineId == SomeGuid
select new Line
{
LineId = a.LineId
}).AsEnumerable()
都不行
你怎麼知道LINQ查詢沒有WHERE子句?在我使用LINQ的經驗中,你會得到完全相同的結果,除了它是IQueryable,而不是IEnumerable。使用擴展方法,只有在.Where()後放置.AsEnumerable()時,纔會獲得WHERE子句。 – LeffeBrune 2012-08-13 19:31:59
我在LinqPad中運行查詢,它顯示了我生成的SQL – bobetko 2012-08-13 20:00:51
而且是的,那是我的問題。當我使用Linq SQL語法時,我不知道如何在WHERE子句後放置AsEnumerable。拉迪斯拉夫回答了這個問題。在這種情況下,似乎lambda語法會提供更容易閱讀的代碼。出於某種原因(我猜是因爲它看起來類似於T-SQL語法),我傾向於使用Linq SQL語法。 – bobetko 2012-08-13 20:04:41