我正在從MySQL緩慢移植一個應用程序來使用Linq2Sql - 但有一個查詢讓我難住了一下。如何在LINQ2SQL中編寫此代碼?
SELECT * FROM網頁,域ID = @reportid AND(PageContent REGEXP '顯示:[\ t] *無')> 0 ORDER BY URL ASC
上我會怎麼寫的東西任何想法像Linq2SQL一樣?它的REGEXP位讓我難住?
我正在從MySQL緩慢移植一個應用程序來使用Linq2Sql - 但有一個查詢讓我難住了一下。如何在LINQ2SQL中編寫此代碼?
SELECT * FROM網頁,域ID = @reportid AND(PageContent REGEXP '顯示:[\ t] *無')> 0 ORDER BY URL ASC
上我會怎麼寫的東西任何想法像Linq2SQL一樣?它的REGEXP位讓我難住?
爲什麼不使用LINQ返回匹配reportid是和包含的項目「顯示:」,以儘量減少從服務器返回的數據量,然後用正則表達式在客戶端過濾該列表?
var query = Pages.Where(p => p.DomainId == 1 && p.PageContent.IndexOf("display:") > 0).OrderBy(o => o.URL);
var regex = new Regex(@"display\:[\t]*none");
foreach (var page in query)
{
if(regex.IsMatch(page.PageContent))
{
// Do whatever...
}
}
有沒有辦法內置到LINQ to SQL,但你有幾個其他的選擇。首先是load your strings in as in-memory objects which you can apply Regex functions to。我不是很喜歡這個,因爲它看起來像你可能會得到一些非常大的字符串來匹配。
第二個選項是利用SQL CLR as described here。這實際上可以讓你創建一個存儲過程,並鏈接到你創建的CLR方法。無論何時在LINQ to SQL上下文中調用該方法,它都會轉換爲存儲過程調用。然後你使用這樣的查詢:
var q = from p in context.Pages
where p.DomainId == reportId &&
RegExMatch(p.PageContent, "display\:[ \t]*none")
select p;
+1,如果需要正則表達式部分,那麼CLR存儲過程可能是要走的路。 – kprobst 2010-07-07 17:35:22
所以,如果我理解正確的話,它在尋找不包含「隱藏」內容的頁面(即沒有在頁面上寫着'顯示:none',與之間的「零個或多個空格或製表符: '和'none'? – StriplingWarrior 2010-07-07 17:13:43