C# 在C中使用谓词生成器的泛型#
我是ASP.NET核心的新手,我正在构建一个小型CRUD web API,我发现了这段代码,并对其进行了修改,我对它不满意,因为我应该编写太多硬代码 我在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>();
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
字符串?