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;
//...
我正在构建一个基于条件运算符的表达式树,但我无法使用 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;
//...