2012-05-29 40 views
0

我有一個屬性字符串,可以是格式的模型「00000044」,所以假設我查詢的在linq中是如此棘手? LINQ的組合正則表達式

public class Foo 
{ 
    private string MemberNo { get; set; } 
} 

從實體框架填充的列表,

和我們的集包括以下內容:

"00000044" include this 
"44000000" include this 
"20440000" exclude this 

如何編寫一個查詢,將排除與非零數字什麼的我們搜索的標準左邊的「44」

將Regex和linq結合起來還是有更好的方法?

+0

'0 * 44'怎麼樣?你可以做'foo.MemberNo.TrimStart('0')。StartsWith(「44」)'看看「44」是否是第一個非零匹配。 – SimpleVar

+0

嘿謝謝你的迴應。你能告訴我linq查詢嗎?我們確信0 * 44正則表達式 - 只是如何編寫查詢 - 我忘了添加這個查詢EF - apolz。 – MikeW

+0

閱讀SQL查詢中有關LIKE關鍵字的內容,因爲您不希望提取所有數據,然後對其進行過濾,但更好地按數據庫過濾。 – SimpleVar

回答

6
var filteredFoos = myFoos 
    .Where(foo => foo.MemberNo.TrimStart('0').StartsWith("44")); 

現在這是,如果你想帶回所有Foos,但如果你想使用實體框架,請看this答案以正確翻譯它。

+0

感謝您的支持 – MikeW

1
var result = fooList.Where(foo => Regex.IsMatch(foo.MemberNo, @"^0*44\d*$")); 

您還需要使MemberNo財產公開。

編輯

或者,一個免費的正則表達式版本:

var result = fooList.Where(foo => foo.MemberNo.TrimStart('0').StartsWith("44")); 
+0

我會遠離正則表達式,因爲它聽起來像44可能是一個可進入的搜索字段。 –

+0

@YuriyFaktorovich在這種情況下,它很容易建立在運行一個正則表達式,如果你有一個有意義的名字有它的一個變量,我認爲它最終被更具可讀性。話雖如此,看到我的編輯爲一個正則表達式的免費版本,如果有很多'Foo'需要過濾,那麼這個版本可能會更好。 –

+0

@YuriyFaktorovich然後我發現它和你的答案一樣。衛生署! –