首页 > 解决方案 > 当 LINQ 应该影响链中的先前调用时,它是如何工作的?(例如 mongo/Linq2Sql)

问题描述

当我使用 MongoDB 时,LINQ 让我感到困惑......
(事实上,它也发生在 Linq2Sql 中)

  1. myCollection.Find(obj=>true)将运行查询以返回 myCollection 的所有文档。

  2. myCollection.Find(obj=>true, new FindOptions(){Limit=1})显然会运行查询以仅从 myCollection 返回一个文档。

  3. myCollection.Find(obj=>true).First()还将运行查询以仅从 myCollection 返回一个文档。

我关于 #3 的问题:对服务器进行了哪些查询?
A. .First()导致该.Find()方法对服务器执行隐式Limit=1查询,
只返回一个文档?(如果是这样,它是如何实现的?)

B. .Find()查询所有文件,.First()只取第一个,然后扔掉其余的?显得很浪费。

谢谢

标签: c#mongodbentity-frameworklinqlinq-to-sql

解决方案


FirstMongoDB 驱动程序提供了一个快捷方式.Limit(1),从服务器读取数据作为对象:

collection.Find(o => true).First();
// is equivalent to
collection.Find(o => true).Limit(1);

发送到服务器的查询应该是:

db.collection.find().limit(1)

如果它没有发送那个或类似的查询,那将是 MongoDB 驱动程序中的一个错误,您可以联系他们并提交一个错误。


推荐阅读