1

1.

documentSession.Query<MyClass>
               .Where(my=>lastNames.Any(my.FullName.EndsWith))
               .ToList();

2.

Func<MyClass,bool> filter = myClass=>lastNames.Any(myClass.FullName.EndsWith);

documentSession.Query<MyClass>.Where(filter).ToList();

第一个将导致异常。第二个将返回结果。

我错过了什么吗?或者我只是不了解内部表达式树构建器算法。

4

1 回答 1

2
  • 不要EndsWith在 RavenDB 查询中使用。它太慢了。相反,使用反转形式的字符串创建一个静态索引,然后StartsWith在您的查询中使用。 阅读此处了解详细信息。

  • 您可能想改为使用自定义Analyzer进行搜索

  • 两个代码示例之间的区别在于,第一个通过 type ,Expression<Func<MyClass, bool>>而第二个通过Func<MyClass, bool>。因为它不是表达式,所以它不会转换为查询。相反,您正在查询没有任何 fitler 的服务器。返回所有结果后,将在客户端应用过滤器。

于 2013-05-03T22:38:03.237 回答