2013-04-30 50 views
1

我在尝试时运行对RavenDB特定查询以下错误:对指数RavenDB LINQ查询失败

Can't extract value from expression of type: ArrayIndex

这里是产生错误的查询:

people = from p in RavenSession.Query<DBObjects.Person, People_ByNameAndTrashedSortByFirstNameAndLastName>() 
     orderby p.FirstName, p.LastName 
     select p; 
... 
//building LINQ query 
... 
people = from p in people 
     where ((p.FirstName.StartsWith(SearchWords[0])) && (p.LastName.StartsWith(SearchWords[1]))) 
     select p; 
... 
//later 
foreach(DBObject.Person person in people) //triggers error listed above 
{ 
} 

我想知道这是否是RavenDB的限制。我注意到如果我切换&&||,那么我没有错误。当然,我也没有得到我想要的结果。我也尝试重写查询为:

people = from p in people 
     where p.FirstName.StartsWith(SearchWords[0]) 
     where p.LastName.StartsWith(SearchWords[1]) 
     select p; 

我得到相同的错误。

我也试过使用动态索引而不是静态索引。我犯了同样的错误。

回答

2

我想也许RavenDB LINQ驱动程序无法应付从数组中提取查询内的值。尝试把已经提取值的SearchWords[0]SearchWords[1]而不是地方:

var pref1 = SearchWords[0]; 
var pref2 = SearchWords[1]; 
... where (p.FirstName.StartsWith(pref1) && p.LastName.StartsWith(pref2)) 
+0

这是它。原来它用'||'代替'&&'是因为我搜索的是整个输入文本而不是数组中的拆分词。谢谢! – user1304444 2013-04-30 17:10:13

+0

啊!遇到同样的问题。通过RavenDB LINQ驱动程序不支持的内容再次跳出。谢谢! – Darryl 2013-11-30 00:09:58