C# 构建基于条件运算符的表达式树以与 MongoDB 过滤器一起使用

C# Build Expression tree based on Conditional operator to use with MongoDB filter

我正在构建一个基于条件运算符的表达式树,但我无法使用 MongoDb 函数获得所需的过滤器。

这是我的函数

 public Task<long> GetUserCountAsync(string tenantId, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            ThrowIfDisposed();

            Expression<Func<TUser, bool>> filter = t => string.IsNullOrWhiteSpace(tenantId) ? t.TenantId != null : t.TenantId == tenantId;
            return await mongoCollection.CountDocumentsAsync(filter);
        }

当我运行上面的代码时,我收到了以下错误

我的问题是如何使用条件运算符构建表达式树?

 Expression<Func<TUser, bool>> filter = t => string.IsNullOrWhiteSpace(tenantId) ? t.TenantId != null : t.TenantId == tenantId;

问题是数据库不支持您尝试构建的表达式。

改变方法。不要在表达式本身中包含条件

//...

Expression<Func<TUser, bool>> filter = t => t.TenantId == tenantId;

if(string.IsNullOrWhiteSpace(tenantId))
    filter = t => t.TenantId != null;
    
//...