我为 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) 表达式!
我不认为你试图这样做。
使用以下行设置条件:
然后在方法调用中使用参数:
不需要手动使用正则表达式大惊小怪。
使用
Regex.Replace
和Match evaluator
:C# 中的演示
正则表达式的描述
DateTime\.Now\.AddMinute\(
- 线DateTime.Now.AddMinute(
([^()]*)
- 捕获组 #1(其值可以通过 访问):除and (之外的x.Groups[1].Value
0 个或多个字符是一个否定(负)字符类(因为它以 开头),它查找除此类中指定的字符之外的所有字符:除and之外的所有字符, a是一个量词,多亏了它,可量化模式找到了 0 个或多个字符)(
)
[^()]
[^
(
)
*
\)
- 象征)