簡體   English   中英

我將如何在LINQ2SQL中編寫它?

[英]How Would I Write This In LINQ2SQL?

我正在慢慢地從MySQL移植一個應用程序以使用Linq2Sql-但是一個查詢使我有些困惑。

SELECT * FROM Pages DomainID = @reportid AND(PageContent REGEXP'display:[\\ t] * none')> 0按URL排序

關於如何使用Linq2SQL編寫類似內容的任何想法? 它的REGEXP有點讓我難過嗎?

LINQ to SQL沒有內置的方法,但是您還有其他兩種選擇。 首先是將字符串作為內存對象加載,您可以將Regex函數應用於 我不太喜歡這樣做,因為看起來您可能會得到一些非常大的字符串來進行匹配。

第二種選擇是按此處所述利用SQL CLR。 這有效地使您可以創建存儲過程,該存儲過程鏈接到您創建的CLR方法。 每當您在LINQ to SQL上下文中調用該方法時,該方法都會轉換為存儲過程調用。 然后使用如下查詢:

var q = from p in context.Pages
        where p.DomainId == reportId && 
              RegExMatch(p.PageContent, "display\:[ \t]*none")
        select p;

為什么不使用LINQ返回與reportid匹配且包含'display:'的項目,以最大程度地減少從服務器返回的數據量,然后在客戶端使用regex過濾該列表?

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...                    
    }                    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM