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
使用LINQ和Lucene查询带有实时投影的索引_Linq_Lucene.net_Ravendb - Fatal编程技术网

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

使用LINQ和Lucene查询带有实时投影的索引,linq,lucene.net,ravendb,Linq,Lucene.net,Ravendb,我使用以下语法定义了索引: public class TestCasesForConfigurationModeIndex : AbstractIndexCreationTask<TestCase> { TestCasesForConfigurationModeIndex() { Map = docs => from x in docs select new { x.CurrentName } Indexe

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

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 { ... }
     }
}
public类TestCasesForConfigurationModeIndex
:AbstractIndexCreationTask
{
TestCasesForConfiguration ModeIndex()测试用例
{
Map=docs=>从文档中的x选择新的{x.CurrentName}
添加(x=>x.CurrentName,FieldIndexing.Analyzed);
TransformResults=…选择新的TestCaseForConfigurationMode{…}
}
}
通过Raven Studio查询此索引的工作与预期一样,但是如何使用LINQ API执行相同的查询?问题是“As”扩展方法不适用于IDocumentQuery,而仅适用于 var query=\u db.Advanced.LuceneQuery() .As().ToArray()

我还尝试了以下方法:

var results = _db.Advanced.LuceneQuery<TestCase, TestCasesForConfigurationModeIndex>()
     .WhereEquals(x => x.CurrentName, searchExpression).Fuzzy((decimal)0.5);
     .AsQueryable().As<TestCaseForConfigurationMode>().ToArray();
var results=\u db.Advanced.LuceneQuery()
.WhereEquals(x=>x.CurrentName,searchExpression).Fuzzy((十进制)0.5);
.AsQueryable().As().ToArray();
这种方法很有效(服务器控制台显示“结果:7个总数中有7个返回”。这是正确的),但我没有返回任何结果(空数组)。

您可能需要使用:

 using Raven.Client.Linq; 
要导入As扩展方法,请尝试使用
.OfType()
而不是
.As()
。它们是相同功能的同义词

此外,您不一定需要转换结果才能使用它(取决于您正在做什么)。

您可以使用,例如:

Session.Advanced.LuceneQuery<IndexModel, Index>()
    .Where("Name:(Bill) ...")
    .SetResultTransformer("MyResultTransformer")
    .SelectFields<MyResultTransformer.Result>()
    .ToList();
Session.Advanced.LuceneQuery()
.其中(“姓名:(账单)……”)
.SetResultTransformer(“MyResultTransformer”)
.SelectFields()
.ToList();

确保As扩展方法中的结果传输器(本例中为MyResultTranformer)对IQueryable类型的对象有效,但lucene查询的类型为IDocumentQuery,它不实现IQueryable。我现在使用了以下脏的解决方法,但希望有一个更好的现成解决方案:var serializer=JsonExtensions.CreateDefaultJsonSerializer();var results=query.QueryResult.results.Select(x=>serializer.Deserialize(新的RavenJTokenReader(x),typeof(TestCaseForConfigurationMode))).ToArray();