我上课了
class MarketData
{
public double Open {get;set;}
public double High{get;set;}
public double Low{get;set;}
public double Close{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我创建了List并填充了最近30天的数据.这是我努力寻找最佳解决方案的地方.用户可以手动输入条件但是采用固定格式,字段可以是例如
Open大于Previous.Close
高于先前.低
低于大于下.高等等
我正在解析字符串条件
public enum ConditionComparer { And, Or }
class SimpleCondition
{
public string Operand1 { get; set; }
public Operators Operator { get; set; }
public string Operand2 { get; set; }
public ConditionComparer Compare { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我必须在这个条件上应用List<MarketData>
并得到匹配的结果.
我在不同的场景中使用了DynamicQueryable类,其中动态和完美工作的条件,但现在我必须将记录与下一个或上一个记录进行比较.
获取两个 MarketData 记录进行比较的问题是滑动窗口问题。如果你打电话
var compare = input.Zip(input.Skip(1),
(a,b) => new Tuple<MarketData, MarketData>(a,b));
Run Code Online (Sandbox Code Playgroud)
您将获得IEnumerable<Tuple<MarketData, MarketData>>
所有市场数据对中的一个。请注意,您的输入被枚举两次。
使用任何框架来构建动态查询,例如。LinqKit,然后应该这样做。只需编写获取Tuple<MarketData, MarketData>
as 输入的表达式即可。元组中的第一项是“旧”项,第二项是“新”项。