添加下面命名空间到您的程序中:
using MongoDB.Driver.Linq; 声明一变量保存对集合的引用
var collection = database.GetCollection("collectionname");
最基本调用linq查询的方式是构造一个集合变量,通过调用AsQueryable() 后,你便可以正常调用linq了。
var query =
from e in collection.AsQueryable<Employee>()
where e.FirstName == "John"
select e;
foreach (var employee in query)
{
// do something
}
当然,你也可以通过lambda语法写查询表达式,先前的查询语句等同于下面的写法:
var query = collection.AsQueryable().Where(e => e.FirstName == "John"); C#编译器会在内部把所有查询翻译为lambda句法,所以这两种写法没有优略之分,当你需要的时候(比如某些查询操作符不被支持的时候),你甚至可以混用这两种方式。
只有linq查询可以转化为相应的MongoDB查询时该查询才会被支持解析,如果你写的linq查询不能被转化成相应的MongoDB查询,那么您的程序会在产生异常或者错误。
MongoDB支持的LINQ查询操作符
Any不含谓词的Any只是测试集合中是否存在any文档对象 不含谓词的Any只是测试集合中是否存在any文档对象
var result =
(from c in collection.AsQueryable<C>()
select c)
.Any();
// 或者
var result =
collection.AsQueryable<C>()
.Any();
Any (含谓词)
含有谓词的Any用来测试集合中是否存在匹配的文档,匹配逻辑在谓词中
var result =
(from c in collection.AsQueryable<C>()
select c)
.Any(c => c.X == 1);
// or
var result =
collection.AsQueryable<C>()
.Any(c => c.X == 1);
投影操作后,带有谓词的Any是不被支持的(至少当前版本),所以下面代码是不可用的。
var result =
collection.AsQueryable<C>()
.Select(c => c.X)
.Any(x => x == 1);
通常来说,你可以使用where字句来替代投影操作,这样你可以移除投影操作。