当比较字段是动态的时,如何与List <t>中的上一个或下一个元素的属性进行比较?</t>

时间:2013-12-23 14:43:11

标签: c# linq dynamic

我有一个班级

class MarketData
{
    public double Open {get;set;}
    public double High{get;set;}
    public double Low{get;set;}
    public double Close{get;set;}
}

现在我创建了List并用最近30天的数据填充了它。这是我努力寻找最佳解决方案的地方。用户可以手动输入条件但是采用固定格式,这些字段可以是例如

打开大于上一个。关闭

高于先前。低

低于下一个。高等等

我正在将字符串条件解析为

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; }
}

现在我必须在List<MarketData>上应用这些条件并获得匹配的结果。

我在不同的场景中使用了DynamicQueryable类,其中条件是动态的并且它完美地工作但现在我必须将记录与下一个或上一个记录进行比较。

1 个答案:

答案 0 :(得分:2)

要比较两个MarketData记录的问题是滑动窗口问题。如果你打电话

var compare = input.Zip(input.Skip(1), 
                        (a,b) => new Tuple<MarketData, MarketData>(a,b));

您获得所有MarketData对IEnumerable<Tuple<MarketData, MarketData>>。请注意,您的输入会被枚举两次。

使用任何框架构建动态查询,例如。 LinqKit,然后应该这样做。只需编写以Tuple<MarketData, MarketData>为输入的表达式。元组中的第一项是“较旧”项,第二项是“较新”项目。