【问题标题】:Linq query with MongoDB works does not work as Func使用 MongoDB 的 Linq 查询不能像 Func 一样工作
【发布时间】:2013-11-04 18:41:32
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: c# linq mongodb


    【解决方案1】:

    来自网络

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

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

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

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

    【讨论】:

    • 这真的很可惜,因为这会在某些情况下简化很多工作:)
    • 好吧,也许在未来:)
    猜你喜欢
    • 2023-03-22
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多