【问题标题】:WCF DataServiceProviderMethods.Compare() versus string.Compare()WCF 数据服务提供者 Methods.Compare() 与 string.Compare()
【发布时间】:2013-01-07 21:03:13
【问题描述】:

WCF 数据服务生成的某些查询似乎会构建调用以下方法的表达式(可能只是一个存根):

DataServiceProviderMethods.Compare 方法(字符串、字符串)
http://msdn.microsoft.com/en-us/library/ff452689.aspx

已经有了静态的 string.Compare(string, string) 加上各种重载。

有人知道为什么这种新方法被认为是合理的吗?

【问题讨论】:

  • 在文档中。此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用。
  • @Blam 为 WCF 数据服务实现 LINQ 后端(例如 NHibernate)时,必须了解并处理包含此方法的表达式。不是一个大问题,但听听为什么 string.Compare() 不够好的原因会很有趣。

标签: c# .net wcf wcf-data-services


【解决方案1】:

DataServiceProviderMethods 类中的方法并不是真正打算直接调用的。您所指的方法是占位符方法。 dataServiceProviderMethods 类用于表达式树。如果节点需要比较,则生成表达式树,因此此类中的方法被引用为该节点中的占位符。实际的提供者应该通过表达式树进行解析,并用他们自己的方法修补这些方法。通过利用这些独特的方法,可以识别需要由提供者在表达式树中修补的方法。

读起来很长...但是我认为如果您阅读以下内容,您会得到更好的理解: http://msdn.microsoft.com/en-us/data/gg191846.aspx

(如果您想跳过很多解释,请在该文档中搜索“UnTyped\RO 示例中的查询”)

【讨论】:

  • 是的,我已经看到了有关 GetValue() 和其他一些的解释。问题是,我发现谈论 DataServiceProviderMethods 的每一页都谈到 GetValue() 和其他三种方法(我理解其基本原理),但没有提及 Compare() 方法集。
  • DataServiceProviderMethods.Compare Method (String, String) 的类文档是按顺序进行比较。但是 string.Compare() 有一个重载,所以它仍然看起来很有趣。
  • 其实我明白你的意思。 compare 方法实际上是这样实现的: 'public static int Compare(String left, String right) { return Comparer.Default.Compare(left, right); }'
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 2020-01-31
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多