MongoDB驱动之Linq操作

添加下面命名空间到您的程序中:

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字句来替代投影操作,这样你可以移除投影操作。

引入地址 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值