Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何与上一个或下一个元素进行比较';列表中的属性<;T>;而比较字段是动态的?_C#_Linq_Dynamic - Fatal编程技术网

C# 如何与上一个或下一个元素进行比较';列表中的属性<;T>;而比较字段是动态的?

C# 如何与上一个或下一个元素进行比较';列表中的属性<;T>;而比较字段是动态的?,c#,linq,dynamic,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;} } 现在我已经创建了这个列表,并用过去30天的数据填充了它。在这里,我正在努力寻找最好的解决方案。用户可以手动输入条件,但在固定格式中,字段可以是 “打开”大于“上一个”。请关闭 高

我有一节课

class MarketData
{
    public double Open {get;set;}
    public double High{get;set;}
    public double Low{get;set;}
    public double Close{get;set;}
}
现在我已经创建了这个列表,并用过去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; }
}
现在,我必须在
列表中应用此条件,并获得匹配结果


我在稍微不同的场景中使用了DynamicQueryable类,在这种场景中,dynamic和它工作得很好,但现在我必须将记录与下一个或上一个记录进行比较。

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

var compare = input.Zip(input.Skip(1), 
                        (a,b) => new Tuple<MarketData, MarketData>(a,b));
var compare=input.Zip(input.Skip(1),
(a,b)=>新元组(a,b));
您将获得所有市场数据对的
IEnumerable
。请注意,您的输入被枚举两次


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

您尝试过什么吗?您能举例说明如何输入这些条件吗?e、 g字符串,以及您的预期输出等@DineshAhuja“最佳解决方案”?你找到解决办法了吗?甚至不是最优的?显示到目前为止您所拥有的。@DineshAhuja就动态过滤器而言,您需要很多相当复杂的约束。将一个字段与另一个字段进行比较,并将每一行与前一行进行比较,这会使动态过滤器变得非常复杂。您是否总是将每一行与它前面的行进行比较,还是要支持其他完全不同的操作?此外,您的所有字段类型都将是双精度的,还是还会混合整数、日期、字符串等?@DineshAhuja如果您可以将每个字段类型与它前面的行进行比较,则不需要将每个字段类型与它后面的行进行比较。我强烈建议您选择其中一个,因为您可以使用其中一个解决任何问题。两者兼有会使查询语言变得不必要的复杂。