【发布时间】:2023-03-10 16:50:01
【问题描述】:
用例: PHP symfony 项目必须与 Mongo 的 C# 后端通信。在 PHP 前端,可以进行查询以从 Mongo 获取数据。此查询通过 API (XML) 发送。 C# 后端反序列化此 XML 以获取对象。然后我想在我的内存中的一个集合上执行一个 Linq-to-objects 查询(这是通过 API 发送的查询)。所以我想制作自己的“LinqBuilder”,这样我就可以查询对象并将它们返回到我的 PHP 前端。
我有以下对象:
public class MongoDoc
{
public int Id { get; set; }
public string Kind { get; set; }
public BsonDocument Data { get; set; }
}
以下是我正在努力实现的示例。
var list = source.Where(x => x.Data["Identifier"] == "H7PXXK").ToList(); // source is collection of MongoDoc objects
上面的代码行是我想用表达式构建的,因为它必须是动态的。我所做的是查询我的 MongoDoc 对象的“Kind”属性,如下所示:
ParameterExpression _expr = Expression.Parameter(typeof(MongoDoc), "x");
expression = Expression.Equal(
Expression.PropertyOrField(_expr, "Kind"),
Expression.Constant("KindValue")
);
这将产生以下 lamdba:
x => (x.Kind == "KindValue")
没错,但现在我需要获取 BsonDocument 属性 Data 中的属性 Identifier。通常它会像上面这样:x => x.Data["Identifier"] == "Value"。这正是我的问题所在。我怎样才能做到这一点?
【问题讨论】:
标签: c# linq mongodb lambda linq-to-objects