RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 894397
Accepted
Aldmi
Aldmi
Asked:2020-10-17 23:08:48 +0000 UTC2020-10-17 23:08:48 +0000 UTC 2020-10-17 23:08:48 +0000 UTC

C# 帮助从字符串中提取值以通过 Linq.Dynamic 进行过滤

  • 772

我为 Linq.Dynamic 设置了一个表达式(我用字符串动态地为 Where 指定过滤)

例如我正在使用

var where = "Id > 2 && EventTrain == \"Transit\"";
var filtred= trains.Where(where).ToList(); //trains - список поездов

除了简单的表达式之外,还需要按相对于当前时间 + - delta 的时间进行过滤。

那些。我想出了这个表达

var where = "ArrivalTime > DateTime.Now.AddMinute(-100) && ArrivalTime < DateTime.Now.AddMinute(100)";     

但是,当然,Linq.Dynamic 不接受它,为了使用时间,您需要使用格式中的 DateTime

  $"DateTime({now.Year}, {now.Month}, {now.Day}, {now.Hour}, {now.Minute}, {now.Second})"

那些。我需要表达

var where = "ArrivalTime > DateTime.Now.AddMinute(-100) && ArrivalTime < DateTime.Now.AddMinute(100)"; 

选择 DateTime.Now.AddMinute(-100) 并根据上面指定的日期格式将其替换为实际计算的表达式。选择 DateTime.Now.AddMinute(100) 并根据上面指定的日期格式将其替换为实际计算的表达式。

我是正则表达式的新手,我试图将表达式“DateTime.Now.AddMinute(DeltaTime)”中括号之间的分钟分开

              if (Regex.Match(where, "DateTime.Now.AddMinute\\((.*)\\)").Success)
                {
                    var val= Regex.Match(where, "DateTime.Now.AddMinute\\((.*)\\)").Groups[1].Value;
                    if (int.TryParse(val, out var min))
                    {
                        var date = now.AddMinutes(min);
                        where = where.Replace("DateTime.Now", $"DateTime({date.Year}, {date.Month}, {date.Day}, {date.Hour}, {date.Minute}, 0)");
                    }
                }

但是这样一个简单的正则表达式只适用于示例

var where = "ArrivalTime > DateTime.Now.AddMinute(-100)"

如果有多个这样的表达式,也可以有括号,例如:

 var where = "(ArrivalTime > DateTime.Now.AddMinute(-100)) && (ArrivalTime < DateTime.Now.AddMinute(100)) && (EventTrain == \"Transit\")"; 

帮我用计算的表达式替换 DateTime.Now.AddMinute(DeltaTime) 表达式!

c#
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Alexander Petrov
    2020-10-17T23:50:03Z2020-10-17T23:50:03Z

    我不认为你试图这样做。

    使用以下行设置条件:

    var where = "ArrivalTime > @0 && ArrivalTime < @1";
    

    然后在方法调用中使用参数:

    trains.Where(where, DateTime.Now.AddMinutes(-100), DateTime.Now.AddMinutes(100))
    

    不需要手动使用正则表达式大惊小怪。

    • 1
  2. Best Answer
    Wiktor Stribiżew
    2020-10-18T00:31:16Z2020-10-18T00:31:16Z

    使用Regex.Replace和Match evaluator:

    var where = "ArrivalTime > DateTime.Now.AddMinute(-100) && ArrivalTime < DateTime.Now.AddMinute(100)";
    var pattern = @"DateTime\.Now\.AddMinute\(([^()]*)\)";
    var now = DateTime.Now;
    var res = Regex.Replace(where, pattern, x => 
        {
            var val= x.Groups[1].Value;
            int min;
            if (int.TryParse(val, out min))
            {
                var date = now.AddMinutes(min);
                return $"DateTime({date.Year}, {date.Month}, {date.Day}, {date.Hour}, {date.Minute}, 0)";
            } else return x.Value;
    });
    Console.WriteLine(res); 
    // => ArrivalTime > DateTime(2018, 10, 17, 14, 35, 0) && ArrivalTime < DateTime(2018, 10, 17, 17, 55, 0)
    

    C# 中的演示

    正则表达式的描述

    • DateTime\.Now\.AddMinute\(- 线DateTime.Now.AddMinute(
    • ([^()]*)- 捕获组 #1(其值可以通过 访问):除and (之外的x.Groups[1].Value0 个或多个字符是一个否定(负)字符类(因为它以 开头),它查找除此类中指定的字符之外的所有字符:除and之外的所有字符, a是一个量词,多亏了它,可量化模式找到了 0 个或多个字符)()[^()][^()*
    • \)- 象征)
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5