使用MongoDB工作的Linq查询不能用作Func

时间:2013-11-04 10:23:53

标签: c# linq mongodb

我在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子句:”

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

来自互联网

  

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

话虽如此,LINQ to MongoDB可能无法翻译代表。

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

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