【问题标题】:Linq query with wildchar in field value [duplicate]字段值中带有通配符的Linq查询[重复]
【发布时间】:2014-02-14 13:02:01
【问题描述】:

我想要一个带有通配符的数据库字段。这是一种反向通配符 linq 搜索。

所以我的字段将包含“100-50-*”,当我搜索以“100-50-”开头的任何内容时,我想找到这个。所以像“100-50-10”、“100-50-3”、“100-50-B”这样的搜索都会找到我的行。

编辑: 我不确定我是否正确解释了这一点。 在搜索之前我不知道数据库的内容。字段值可以是“100-”或“100-50-”或“100-50-10”。如果我搜索 100-50-10,我希望显示所有三个记录。

Thanigainathan 的答案实际上与我所寻找的非常接近。

【问题讨论】:

  • 你使用什么特殊字符?只有*还是全部来自C#正则表达式?

标签: c# asp.net linq entity-framework


【解决方案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(仅将此模式作为整数)并搜索以它开头的项目。

【讨论】:

  • 这似乎需要我在搜索之前知道数据库中是否有通配符以及在哪里
【解决方案2】:

请试试这个。

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

【讨论】:

  • 这似乎有效。稍后将对其进行适当的测试。谢谢
  • 我说得太早了。这也命中了这些:“1”、“100-5”、“100-50-1”,所以通配符没有意义。
【解决方案3】:

这是我做的一个快速测试,似乎可以解决问题。

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 您可以构建您正在寻找的任何模式。

【讨论】:

    猜你喜欢
    • 2020-11-25
    • 2016-04-25
    • 2013-03-25
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多