C# 在C中使用谓词生成器的泛型#

C# 在C中使用谓词生成器的泛型#,c#,asp.net-core,generics,predicatebuilder,C#,Asp.net Core,Generics,Predicatebuilder,我是ASP.NET核心的新手,我正在构建一个小型CRUD web API,我发现了这段代码,并对其进行了修改,我对它不满意,因为我应该编写太多硬代码 我在C#中有一个通用谓词生成器,但为了使用它,我必须编写更多的代码,并希望减少代码 这是我的密码: public Expression<System.Func<Client, bool>> Go() { var predicate = PredicateBuilder.True<Client>();

我是ASP.NET核心的新手,我正在构建一个小型CRUD web API,我发现了这段代码,并对其进行了修改,我对它不满意,因为我应该编写太多硬代码

我在C#中有一个通用谓词生成器,但为了使用它,我必须编写更多的代码,并希望减少代码

这是我的密码:

public Expression<System.Func<Client, bool>> Go()
{
    var predicate = PredicateBuilder.True<Client>();

    // HERE I TRY TO USE A LOOP INSTEAD 
    // OF USING HARD CODE 
    // AND BUILD MY predicate
    // AND REMOVE THIS CODE
    //----------------------------------------------

    if (!string.IsNullOrEmpty(ClntName))
    {
        predicate = predicate.And(i => i.ClntName.ToLower()
        .Contains(ClntName.ToLower()));
    }
    if (!string.IsNullOrEmpty(ClntBusnsName))
    {
        predicate = predicate.And(i => i.ClntBusnsName.ToLower()
        .Contains(ClntBusnsName.ToLower()));
    }
    if (!string.IsNullOrEmpty(ClntEmail))
    {
        predicate = predicate.And(i => i.ClntEmail.ToLower()
        .Contains(ClntEmail.ToLower()));
    }

    predicate = predicate.And(i => i.ClntHide == ClntHide);

    //----------------------------------------------

    return predicate;
}
public Expression Go()
{
var predicate=PredicateBuilder.True();
//在这里,我尝试使用一个循环
//使用硬代码的方法
//并构建我的谓词
//并删除此代码
//----------------------------------------------
如果(!string.IsNullOrEmpty(ClntName))
{
谓词=谓词和(i=>i.ClntName.ToLower()
.Contains(ClntName.ToLower());
}
如果(!string.IsNullOrEmpty(ClntBusnsName))
{
predicate=predicate.And(i=>i.clntbunsname.ToLower()
.Contains(clntbunsname.ToLower());
}
如果(!string.IsNullOrEmpty(ClntEmail))
{
predicate=predicate.And(i=>i.ClntEmail.ToLower()
.Contains(ClntEmail.ToLower());
}
谓词=谓词和(i=>i.ClntHide==ClntHide);
//----------------------------------------------
返回谓词;
}
在这里我使用代码:

public async Task<PagedList<Client>> GetByConditionsClientsAsync
                (ClientSearchModel clientSearchModel, bool trackChanges)
        {
            
                var clients = await FindByCondition(clientSearchModel.Go(), trackChanges)
                .Sort(clientSearchModel.OrderBy)             
                .ToListAsync();
                return PagedList<Client>
                .ToPagedList(clients, clientSearchModel.PageNumber,clientSearchModel.PageSize);
        }
     
公共异步任务GetByConditionsClientsAsync
(ClientSearchModel ClientSearchModel,布尔轨迹更改)
{
var clients=await FindByCondition(clientSearchModel.Go(),trackChanges)
.Sort(clientSearchModel.OrderBy)
.ToListAsync();
返回页面列表
.ToPagedList(客户端、clientSearchModel.PageNumber、clientSearchModel.PageSize);
}
我只希望我的代码是这样的:

 public class SearchModel<T>: RequestParameters
{
      public SearchModel()
        {
            OrderBy = "xxx";
        }  
  
    public Expression<System.Func<T, bool>> Go()
    {            
        var predicate = PredicateBuilder.True<T>();
               
            // HERE IS THE NEW CODE         
            //----------------------------------------------
          foreach (....)
                {
                 ....
                  predicate = predicate.And ....
                }      
            //----------------------------------------------

         return predicate;
    }
}
public类SearchModel:RequestParameters
{
公共搜索模型()
{
OrderBy=“xxx”;
}  
公共表达Go()
{            
var predicate=PredicateBuilder.True();
//这是新代码
//----------------------------------------------
foreach(…)
{
....
谓词=谓词。和。。。。
}      
//----------------------------------------------
返回谓词;
}
}
那我该怎么做呢
我使用ASP.NET CORE 3.0

是否都是
ClientXXX
字符串?