【问题标题】:LINQ - find between lowest and highest stringLINQ - 在最低和最高字符串之间查找
【发布时间】:2020-06-14 17:30:59
【问题描述】:

我想在较大的字符串中查找“0000”和“9999”之间的字符串编号 从“qwt0000abc”到“qwt9999abc”。

MSSQL,其中 id 在“qwt0000abc”和“qwt9999abc”之间

我将如何编写相同的 LINQ 查询?

var selectedOrders = orders.Where(f => f.Id between "qwt0000abc" and "qwt9999abc");

【问题讨论】:

  • 到目前为止你尝试过什么?您的代码示例代码无效

标签: c# sql-server performance linq


【解决方案1】:

假设您只想要具有相同前缀和后缀的行,那么只需像这样替换 between

var selectedOrders = orders.Where(f => f.Id.CompareTo("qwt0000abc") >= 0 && f.Id.CompareTo("qwt9999abc") < 0).ToList() ;

如果这是 EF,你也许可以使用 Like:

var selectedOrders = orders.Where(f => EF.Functions.Like(f.Id, "qwt[0-9][0-9][0-9]abc")).ToList();

【讨论】:

    【解决方案2】:

    试试这个:

    var selectedOrders = arr.Where(x => Regex.IsMatch(x, ".*[0-9]{4}.*"));
    

    或者这个,如果你需要 qwt 前缀和 abc 后缀。

    var selectedOrders = arr.Where(x => Regex.IsMatch(x, "qwt[0-9]{4}abc"));
    

    .* 这里是任意次数的任何文字(包括零),[0-9]{4} 是 0 到 9 之间的数字,正好是 4 位。

    【讨论】:

    • 如果这是 EF 并且需要翻译成 SQL,那就不行了。
    • 一个可能的替代方案,但不是引入正则表达式,而是使用 linq 并解释一下如何?
    猜你喜欢
    • 2021-07-02
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多