2012-04-04 20 views
1
條款

我有2種形式的通話試驗,這一個如何構建一個適當的WHERE與RavenDb

products = DocumentSession.Query<Product>() 
     .Statistics(out stats) 
     .Where(p => p.INFO2.StartsWith(term1)) 
     .Where(p => p.INFO2.StartsWith(term2)) 
     .Where(p => p.INFO2.StartsWith(term3)) 
     .OrderByField(columnToSortBy, columnToSortByAsc) 
     .Skip(pageIndex * pageSize) 
     .Take(pageSize) 
     .ToList() 
     ; 

和這樣

products = DocumentSession.Query<Product>() 
     .Statistics(out stats) 
     .Where(p => p.INFO2.StartsWith(term1) & p.INFO2.StartsWith(term2) & p.INFO2.StartsWith(term3)) 
     .OrderByField(columnToSortBy, columnToSortByAsc) 
     .Skip(pageIndex * pageSize) 
     .Take(pageSize) 
     .ToList() 
     ; 

第一個返回的是更多的記錄符合我的期望,而秒鐘似乎返回所有類型爲Product的文檔。什麼是從一個LINQ表達式點2之間的差異,並有我忽略任何可能否定什麼,我試圖完成,這是一個3學期的查詢,每個術語被AND'd在一起。

編輯:修改代碼每Russ。

string t1 = terms[0]; 
    string t2 = terms[1]; 
    string t3 = terms[2]; 

    products = DocumentSession.Query<Product>() 
     .Statistics(out stats) 
     .Where(p => p.INFO2.StartsWith(t1) && p.INFO2.StartsWith(t2) && p.INFO2.StartsWith(t3)) 
     .OrderByField(columnToSortBy, columnToSortByAsc) 
     .Skip(pageIndex * pageSize) 
     .Take(pageSize) 
     .ToList() 
     ; 

編輯2:這是你砸你的臉下鍵盤,或與此有關的任何其他固體物體上......要回去這裏的基本標準的C#And和Or

謝謝你, 斯蒂芬

+0

不用擔心;我不認爲有一個Stack overflow的C#開發人員至少沒有這樣做過!我知道我有:) – 2012-04-04 00:49:15

回答

2

在第二塊你正在做的,而不是&的& &所以不是作爲一個比較,它試圖做一個位運算。

編輯:在第2個的情況下,你可以改變這一點:

.Where(p => p.INFO2.StartsWith(terms[0]) & p.INFO2.StartsWith(terms[1]) & p.INFO2.StartsWith(terms[2])) 

這樣:

.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2])) 

這使得它適當和條款。

2日編輯:如果這意味着要與操作,那麼你並不需要3個方面 - 你需要一個長期,否則你會對着相同的字符串的3個實例來比較。

terms[0] = "test"; 
terms[1] = "test"; 
terms[2] = "test"; 

.Where(p => p.INFO2.StartsWith(terms[0]) && p.INFO2.StartsWith(terms[1]) && p.INFO2.StartsWith(terms[2])) 

相同

string term = "test"; 

.Where(p => p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term) && p.INFO2.StartsWith(term)) 

就提到這一點,因爲這可能使你的代碼很難在未來維持。

+0

謝謝拉斯。我正在尋找的是和而不是或。 – 2012-04-04 00:39:55

+0

好了 - 你沒有提到,在你原來的問題,我已經編輯我在此基礎上主要的答案。 – 2012-04-04 00:42:38

+0

我改變了問題的最後一句強調And。 – 2012-04-04 00:50:21