到目前为止,我还没有设法找出发生这种情况的原因,所以我沿着@innoSPG 建议的路线应用标准并相应地构建查询。
我第一次尝试使用 PredicateBuilder,但我无法让它与 MongoDB 一起使用。
所以最后我通过在查询数据库之前根据我的条件声明表达式来动态构建查询。where
然后我在 linq 查询的子句中应用这些表达式。这是一些代码:
IEnumerable<Event> matches;
Expression<Func<Event, bool>> searchQuery;
Expression<Func<Event, bool>> dateQuery;
switch (_searchColumn)
{
case "username":
searchQuery = (x) => x.UserFullName.Contains(_searchQuery) || x.UserEmailAddress.Contains(_searchQuery);
break;
case "eventtype":
searchQuery = (x) => x.Type.In(_eventTypes);
break;
default:
searchQuery = (x) => true;
break;
}
if (applyDateFilter)
{
var date = Convert.ToDateTime(_datefilter);
DateTime startDate = date.Date;
DateTime endDate = date.AddDays(1).Date;
dateQuery = (x) => (x.Id >= startDate.ToObjectId() && x.Id < endDate.ToObjectId());
}
else
{
dateQuery = (x) => true;
}
matches = collection
.AsQueryable<Event>()
.Where(searchQuery)
.Where(dateQuery)
.OrderByDescending((x) => x.Id);
不是世界上最好的代码,但你明白了:-)