拦截和覆盖对象中的比较表达式,否则该对象将委托给Linq到Objects提供程序

时间:2015-09-28 22:06:22

标签: c# linq iqueryprovider

此处的目标是使一些WCF数据服务查询方案准确地反映在测试代码中。

遵循模拟EF功能详细here的相同模式,我正在模拟一个DataServiceQuery包装类,并通过在我的测试数据上调用.AsQueryable()委托给返回的IQueryable。

我想覆盖特定相等表达式的LINQ to objects行为(如果重要的话,比较两个字节数组时)。我想比较数组中的值而不是引用(例如使用util)。

我可以看到实现这一点的方法是创建一个提供程序,我访问表达式,提取适当的值,组成一个新表达式,并将其传递给LINQ to objects提供程序。这是很多工作。如果没有这样做,有没有更简单的方法来完成这项工作,还是我不得不诉诸解析表达式?

1 个答案:

答案 0 :(得分:1)

您可以尝试创建自己的扩展方法,这些方法采用更具体的数据类型。这条线上的东西:

vel = [4, 3]
lst = [[4, 5]  # changed this identifier. Don't shadow Python built-ins
       [6, 4]
       [7, 5]
       [3, 4]]

lst = [[vel[0]+sublst[0], vel[1]+sublst[1]] for sublst in lst]