使用LINQ和Lucene查询实时投影索引



我用以下语法定义了一个索引:

public class TestCasesForConfigurationModeIndex 
      : AbstractIndexCreationTask<TestCase>
{
     TestCasesForConfigurationModeIndex() 
     {
         Map = docs => from x in docs select new { x.CurrentName }
         Indexes.Add(x => x.CurrentName, FieldIndexing.Analyzed); 
         TransformResults = ... select new TestCaseForConfigurationMode { ... }
     }
}

通过Raven Studio查询这个索引如预期的那样工作,但是我如何使用LINQ API执行相同的查询?问题是"As"扩展方法不可用于IDocumentQuery,而只能用于var query = _db.Advanced.LuceneQuery().ToArray。as () ();

我还尝试了如下操作:

var results = _db.Advanced.LuceneQuery<TestCase, TestCasesForConfigurationModeIndex>()
     .WhereEquals(x => x.CurrentName, searchExpression).Fuzzy((decimal)0.5);
     .AsQueryable().As<TestCaseForConfigurationMode>().ToArray();

这种工作(服务器控制台显示我"结果:7个返回总数。"这是正确的),但我没有得到任何结果返回(空数组)。

您可以使用SelectFields<>,例如:

Session.Advanced.LuceneQuery<IndexModel, Index>()
    .Where("Name:(Bill) ...")
    .SetResultTransformer("MyResultTransformer")
    .SelectFields<MyResultTransformer.Result>()
    .ToList();

确保在单独的类

中有结果转换器(在这个例子中是myresulttransformer)

您可能需要使用:

 using Raven.Client.Linq; 

尝试使用.OfType<T>()代替.As<T>()。它们是相同功能的同义词。

同样,你不一定需要转换结果来使用它(取决于你在做什么)。

最新更新