2

我在 MongoDB 集合上构建了一个 Linq 查询,它可以正确检索我的文档:

var parts = mongoParts.AsQueryable()
                       .Where(mongo => mongo.Prop1 == bmbMatch.Prop1 && mongo.Prop2 == bmbMatch.Prop2)
                       .ToList();

这很好用,但是为了减少代码,我编写了一个通用函数

Func<T, T, bool> selector

它采用与上述 Where 子句中完全相同的 lamdba 表达式,这使得它:

var mongo = mongoQuery.AsQueryable()
                      .Where(tmongo => selector(tmongo, localMatch))
                      .ToList();

选择器为:

(mongo, local) => mongo.Prop1== local.Prop1 && mongo.Prop2 == local.Prop2 

这给了我一个“不支持的 where 子句:”

有任何想法吗?

4

1 回答 1

1

来自网络

并非所有 LINQ 查询都可以转换为等效的 MongoDB 查询,因为 C# 允许您编写在 MongoDB 查询语言中没有任何等效项的表达式。

话虽如此,LINQ to MongoDB 可能无法翻译委托。

您可以在此地址上找到所有受支持的 LINQ 查询。

结论:如果您需要查询非常大的数据或尽可能快地进行查询,您将不得不坚持以前的解决方案。否则,从数据库中提取所有数据并在内存中查询它们。

于 2013-11-04T10:33:39.223 回答