本節介紹支持的where字句javascript
正如前面提到的,不是全部的C#表達式都支持where子句。您能夠以此文爲指導,或者你能夠嘗試表達,看看它是否工做(若是不支持,拋出運行時異常,)。java
Where字句一般使用where查詢操做運算符來介紹,可是在某些狀況下,咱們必須經過&&合併使用它。正則表達式
注意:mongodb
在1.4版本中還有些限制,可是以後的版本已經解除了,因此在此再也不翻譯。測試
子表達式能夠經過&&合併來查詢知足全部子表達式的文檔spa
var query = from c in collection.AsQueryable<C>() where c.X > 0 && c.Y > 0 select c; // or var query = collection.AsQueryable<C>() .Where(c => c.X > 0 && c.Y > 0);
上面語句可轉化爲下述mongodb查詢語句翻譯
{ X : { $gt : 0 }, Y : { $gt : 0 } }
在某些狀況下咱們也可使用$and操做符,以下面例子:查詢c.X被2整除同時被3整除的文檔對象:code
var query = from c in collection.AsQueryable<C>() where (c.X % 2 == 0) && (c.X % 3 == 0) select c; // or var query = collection.AsQueryable<C>() .Where(c => (c.X % 2 == 0) && (c.X % 3 == 0));
上面例子能夠轉化爲下面使用了 $and的mongodb查詢語句對象
{ $and : [{ X : { $mod : [2, 0] } }, { X : { $mod : [3, 0] } }] }
這個方法是用來測試集合中字段或屬性是否包含任何項。blog
var query = from c in collection.AsQueryable<C>() where c.A.Any() select c; // or var query = collection.AsQueryable<C>() .Where(c => c.A.Any());
若是A存在一個或者多個項,則會匹配。
可轉化爲下面mongodb查詢語句
{ A : { $ne : null, $not : { $size : 0 } } }
這個方法用來測試集合中全部項,它會產生一個$elemMatch條件:
var query = from c in collection.AsQueryable<C>() where c.A.Any(a => a.B == 1) select c; // or var query = collection.AsQueryable<C>() .Where(c => c.A.Any(a => a.B == 1));
可轉化爲下面mongodb查詢語句:
{ A : { $elemMatch : { B : 1 } } }
這種形式主要是完整性。你可能會使用不多。它使用一個布爾常數來匹配或不匹配文檔。
var query = from c in collection.AsQueryable<C>() where true select c; // or var query = collection.AsQueryable<C>() .Where(c => true);
可轉化爲下面mongodb查詢語句:
{ _id : { $exists : true } }
將匹配全部文檔,由於_id是必填字段
一個布爾值的字段或屬性的文檔沒有必要和true進行比較,由於它自己已經在where的時候隱式的和true進行了比較。
var query = from c in collection.AsQueryable<C>() where c.B select c; // or var query = collection.AsQueryable<C>() .Where(c => c.B);
可轉化爲下面mongodb查詢語句:
{ B : true }
根據上下文這個方法有兩種用法
1.測試一個集合中的字段或者屬性是否包含一個特定的值:
1. var query = 2. from c in collection.AsQueryable<C>() 3. where c.A.Contains(123) 4. select c; 5. // or 6. var query = 7. collection.AsQueryable<C>() 8. .Where(c => c.A.Contains(123));
可轉化爲下面mongodb查詢語句:
{ A : 123 }
這個轉換依賴於mongodb查詢語言對集合項中字段的處理方式
2.測試一個字段或者屬性是否包含在一個集合中
var local = new [] { 1, 2, 3 }; var query = from c in collection.AsQueryable<C>() where local.Contains(c.A) select c; // or var query = collection.AsQueryable<C>() .Where(c => local.Contains(c.A));
可轉化爲下面mongodb查詢語句:
{ A : { $in : [1, 2, 3] } }
這個方法用來篩選對象字符串類型的字段或者屬性是否包含一個特定的子串:
var query = from c in collection.AsQueryable<C>() where c.S.Contains("abc") select c; // or var query = collection.AsQueryable<C>() .Where(c => c.S.Contains("abc"));
可轉化爲下面mongodb查詢語句:(使用正則表達式):
{ S : /abc/ }
這個方法用於篩選集合中項字段或者屬性是否包含提供的全部值:
var query = from c in collection.AsQueryable<C>() where c.A.ContainsAll(new[] { 1, 2, 3 }) select c; // or var query = collection.AsQueryable<C>() .Where(c => c.A.ContainsAll(new[] { 1, 2, 3 }));
可轉化爲下面mongodb查詢語句:
{ A : { $all : [1, 2, 3] } }
這個方法用於篩選集合中項的字段或者屬性是否包含任何一個提供的值:
var query = from c in collection.AsQueryable<C>() where c.A.ContainsAny(new[] { 1, 2, 3 }) select c; // or var query = collection.AsQueryable<C>() .Where(c => c.A.ContainsAny(new[] { 1, 2, 3 }));
可轉化爲下面mongodb查詢語句:
{ A : { $in : [1, 2, 3] } }
該方法用於篩選一個可枚舉的含有特定數量項的字段或者屬性。
var query = from c in collection.AsQueryable<C>() where c.L.Count() == 3 select c; // or var query = collection.AsQueryable<C>() .Where(c => c.L.Count() == 3);
可轉化爲下面mongodb查詢語句:
{ L : { $size: 3 } }
和方法用法同樣,生成一樣的查詢語句
var query = from c in collection.AsQueryable<C>() where c.L.Count == 3 select c; // or var query = collection.AsQueryable<C>() .Where(c => c.L.Count == 3);
可轉化爲下面mongodb查詢語句::
{ L : { $size: 3 } }
剩下的待續。。。