我正在尝试使用mongoDbDriver linq加入两个简单的集合,但是在尝试执行结果查询时遇到了一个奇怪的问题。 我试图使用普通的Linq复制查询,以便执行内存中的所有内容,而且没有任何问题。 在PresenceSearchElement的构造函数内部,我什么也不做,因此那里没有null异常。
var userCollection = DbContext.GetCollection<User>();
var presenceCollection = DbContext.GetCollection<Presence>();
var fb = new FilterDefinitionBuilder<Presence>();
var presencesList = presenceCollection.Find(fb.Empty).ToList();
var fb2 = new FilterDefinitionBuilder<User>();
var userList = userCollection.Find(fb2.Empty).ToList();
//Memory query execution
var linqRes = presencesList.Join(
userList,
presence => presence.UserId,
user => user.Id,
(presence, user) => new PresenceSearchElement(presence, user)).ToList();
//mongodB query construction
var mongoDbJoinQuery = presenceCollection.AsQueryable()
.Join(
userCollection.AsQueryable(),
presence => presence.UserId,
user => user.Id,
(presence, user) => new PresenceSearchElement(presence, user));
var mongoDbRes = await mongoDbJoinQuery.ToListAsync();
这是执行上述代码的最后一行接收到“ System.NullReferenceException”时得到的堆栈跟踪。
at MongoDB.Driver.Linq.Processors.Pipeline.MethodCallBinders.JoinBinder.Bind(PipelineExpression pipeline, PipelineBindingContext bindingContext, MethodCallExpression node, IEnumerable`1 arguments)
at MongoDB.Driver.Linq.Processors.MethodInfoMethodCallBinder`1.Bind(PipelineExpression pipeline, TBindingContext bindingContext, MethodCallExpression node, IEnumerable`1 arguments)
at MongoDB.Driver.Linq.Processors.PipelineBinderBase`1.BindMethodCall(MethodCallExpression node)
at ....
我不确定驱动程序中是否有错误,或者我做错了什么。