2014-02-14 47 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你可以建立你想要的任何模式。