暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MongoDB驱动之Linq操作

后端Q 2024-10-23
39

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

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


文章转载自后端Q,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论