2
我對Linq非常陌生,並且正在使用Linq-to-Sql,如下所示。但是在下面的例子中,我的where子句永遠不會被執行,並且結果查詢會嘗試從我的表中獲取所有記錄,甚至忽略take方法。Linq-to-sql - 查詢未被過濾
能有人指出,以什麼我做錯了
var baseQry = db.Table;
baseQry.Where(a => a.tab_id == theId);
baseQry.Select(o => new
{
o.name,
o.display_name,
o.type,
o.info,
time_stamp = (Convert.ToDateTime(o.timestamp).ToLongDateString())
}).Take(10);
baseQry.ToList();
感謝馬特,是工作的。我試圖分解它的原因是,我可以根據用戶輸入動態添加更多的子句。在句法上,我相信我的代碼看起來和你的代碼很相似,但是對於一件小事,你的作品與我的不同!! 我已經研究過使用PredicateBuilder和Scott的動態linq庫,但在進入所有這些之前,我想嘗試一些簡單的東西。 任何解釋將不勝感激。 – Karthik 2010-07-28 21:56:49
IQueryable是你的朋友(http://msdn.microsoft.com/en-us/library/bb351562.aspx)。您的查詢(.Where,.Select,.Take)中的任何子句都沒有實際檢索數據。他們只是建立一個查詢,然後在您調用ToList()時執行。你會在LINQ世界看到這個叫做「延期執行」的東西。好的是,只要將查詢片段的返回值保存爲IQueryable ,就可以繼續添加它們以進一步修改查詢。我希望我解釋得很好。 –
2010-07-28 22:02:17
謝謝。我能夠使用IQueryable並使其工作。雖然很詳細。非常感謝你的幫助。 – Karthik 2010-07-29 00:38:22