【发布时间】:2021-01-21 04:19:12
【问题描述】:
网络核心应用程序。我实现了通用存储库模式。我正在做一些过滤功能,如下所示。
var param = Expression.Parameter(typeof(SiteAssessmentRequest), "x");
Expression<Func<SiteAssessmentRequest, bool>> query;
if(request.role == "Admin")
{
query = null;
}
else
{
query = x => x.CreatedBy == request.Userid || x.AssignedTo == request.Userid;
}
Expression body = Expression.Invoke(query, param);
if (request.Client != null && request.Client.Length != 0)
{
Expression<Func<SiteAssessmentRequest, bool>> internalQuery = x => request.Client.Contains(x.Client);
body = Expression.AndAlso(Expression.Invoke(query, param), Expression.Invoke(internalQuery, param));
}
if (request.CountryId != null && request.CountryId.Length != 0)
{
Expression<Func<SiteAssessmentRequest, bool>> internalQuery = x => request.CountryId.Contains(x.CountryId);
body = Expression.AndAlso(Expression.Invoke(query, param), Expression.Invoke(internalQuery, param));
}
var lambda = Expression.Lambda<Func<SiteAssessmentRequest, bool>>(body, param);
var siteAssessmentRequest = await _siteAssessmentRequestRepository.GetAsync(lambda, x => x.OrderByDescending(x => x.Status == Status.New.ToString()).ThenByDescending(x => x.Status == GetEnumDescription(Status.InProgress)).ThenByDescending(x => x.Status == Status.Closed.ToString()).ThenByDescending(x => x.StartDate), x => x.Country).ConfigureAwait(false);
在上面的代码中,只要管理员登录我不想过滤。在管理员的情况下,当我将 null 分配给以下异常时,它会在下面的行中抛出
Expression body = Expression.Invoke(query, param);
参数:表达式为必填项,不能为空
谁能帮我解决这个问题。任何帮助,将不胜感激。谢谢
【问题讨论】:
标签: c# linq generics lambda repository-pattern