我收到了來自Raven DB的奇怪(非)結果。Raven DB LINQ Where->任何查詢不起作用
我正在客戶端和服務器上運行最新的穩定版本v2.5.2666。
我想要檢索的是「第一個包含Id值爲'x'的Component對象的DeployProject文檔」。
所以,我想的第一件事就是:
var project = _documentSession.Query<DeployProject>()
.FirstOrDefault(i=>i.ComponentList.Any(j=>j.Id == componentId));
但是返回null,即使我知道的數據是正確的。爲了驗證我不瘋狂,我添加了一個.ToList()到中間,所以它會把所有的文檔都放到內存中查詢它。
var project = _documentSession.Query<DeployProject>()
.ToList()
.FirstOrDefault(i=>i.ComponentList.Any(j=>j.Id == componentId));
而且DID工作,所以我的邏輯和數據是正確的。但是,這當然是非常低效的,整個想法是我只想拉取包含相關子記錄的單個文檔。
所以有一定似乎與掠奪是如何查詢索引,因爲數據肯定是有問題的,我可以檢索它,如果我拉的一切到內存並運行相同的LINQ查詢。
我希望(?恐懼)是該指數爲陳舊的,所以我告訴它給我新的數據:
var project = _documentSession.Query<DeployProject>()
.Customize(i=>i.WaitForNonStaleResultsAsOfLastWrite())
.FirstOrDefault(i=>i.ComponentList.Any(j=>j.Id == componentId));
但同樣我得到空。 Raven似乎並不像我期望的那樣對待LINQ語句,即LINQ到對象的方式將起作用。我知道有一些canbe差異,但是這應該是我希望的工作一個非常簡單的查詢。
任何人有任何想法?我錯過了一些簡單的東西嗎
編輯:據Raven的文件,好像這應該沒有任何冒險索引工作:
http://ravendb.net/docs/client-api/querying/using-linq-to-query-ravendb
除了WHERE子句中,還有其他一些有用的運營商 你可以用它來過濾結果。
任何可以對物體(或元列表)的集合在 實體使用,只有那些誰滿足條件返回。 RavenDB也 支持一個在運營商,使扭轉任何比較簡單:
// Return only companies having at least one employee named "Ayende"
IQueryable<Company> companies = from c in session.Query<Company>()
where c.Employees.Any(employee => employee.Name == "Ayende")
select c;
Downvote?真?任何原因? –
對我來說,倒票是一個不明白問題的人。 – Hogan