2014-02-14 46 views
0

我想要一個帶有wildchars的數據庫字段。這是一種反向的wildchar linq搜索。Linq查詢字段值中的wildchar

所以我的領域將包含「100-50- *」,我想找到這個,當我搜索任何以「100-50-」開頭的東西。所以像「100-50-10」,「100-50-3」,「100-50-B」這樣的搜索都會找到我的行。

編輯: 我不知道我解釋正確。 我不知道搜索前的數據庫內容。字段值可以是「100-」或「100-50-」或「100-50-10」。如果我搜索100-50-10,我希望所有三條記錄都顯示出來。

Thanigainathan的回答其實非常接近我所尋找的。

+0

你使用什麼特殊字符?只有'*'或全部來自C#正則表達式? – idlerboris

回答

0

請試試這個。

var dataSource = new List<string>() { "100-50-*" }; 
    var filteredData = dataSource.Where(l => "100-50-10".StartsWith(l.Replace("*",string.Empty))).ToList(); 
+0

這似乎工作。稍後將對其進行正確測試。謝謝 –

+0

我說得太快了。這也擊中了這些:「1」,「100-5」,「100-50-1」,所以wildchar沒有意義。 –

1

可以使用的東西在

string searchString = "100-50-B"; 
string regex = "[0-9]{3}-[0-9]{2}"; 

var match = new Regex(regex).Match(searchString).Value; 

var matches = DataContext.Table.Where(e => e.StartsWith(match)); 

正則表達式的行會提取XXX-XX(僅此模式爲整數)並搜索開始的項目。

+0

看來,這需要我知道,如果在數據庫中的一個wildchar和在哪裏搜索 –

0

下面是我做的一個快速測試,似乎解決了這個問題。

List<string> test = new List<string> { "100-50-1,", "100-50-2", "100-50-3", "100-60-6" }; 
var items = (from s in test where s.StartsWith("100-50") select s).ToList(); 

使用StartsWith你可以建立你想要的任何模式。