【发布时间】:2019-04-15 13:53:11
【问题描述】:
我正在尝试通过发送表达式(C# mongo 驱动程序版本 2.7.3)查询一些数据并投影到具有较少属性的类。 我试图了解为什么特定表达式会失败。 该失败极大地限制了用户编写通用投影并迫使他在每次调用中内联编写投影。 这是一个简化的例子:
private IMongoCollection<MyOriginalClass> _collection;
class MyOriginalClass // imagine this class has many more properties
{
public int ID { get; set; }
}
class MyProjectedClass
{
public int ID { get; set; }
}
void DoWork()
{
var data1 = GetData(lib => new MyProjectedClass { ID = lib.ID }); // succeeds
var data2 = GetData(lib => ToProjected(lib)); // Fails in mongo driver: Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index
}
IEnumerable<MyProjectedClass> GetData(Expression<Func<MyOriginalClass, MyProjectedClass>> projection)
{
return _collection
.Aggregate()
.Project(Builders<MyOriginalClass>.Projection.Expression(projection))
.ToList();
}
MyProjectedClass ToProjected(MyOriginalClass orig)
{
return new MyProjectedClass {ID = orig.ID};
}
【问题讨论】:
-
但是第二个仍然是 Expression 而不是 Func(它没有被编译)。
-
没错。我已经更新了我的答案以更具体
标签: c# database mongodb linq-expressions mongodb-csharp-2.0